एक टुकड़े से मैं एक गतिविधि शुरू करता हूं, जो एक नया खंड खोलता है। इसके अलावा, मैं पहले खंड (AllDishes) से गतिविधि पर अंतिम खंड (DishDetailView) के इरादे से एक स्ट्रिंग मान पास करता हूं। खंड (DishDetailView) को एक लेआउट (fragment_dishdetailview) के संदर्भ के रूप में सेट किया गया है, लेकिन जब मैं पास किए गए पाठ को सेट करने का प्रयास करता हूं, तो दृश्य अपडेट नहीं हो रहा है।

जब मैं अपने ऐप को डिबग करता हूं, तो स्ट्रिंग पैरामीटर ("Test") पास हो जाता है और TextView name का टेक्स्ट भी सही ढंग से सेट होता प्रतीत होता है, जैसा कि आप नीचे स्क्रीनशॉट में देख सकते हैं। , लेकिन किसी तरह UI (fragment_dishdetailview) अपडेट नहीं हो रहा है, यह बस खाली है।

मुझे यकीन नहीं है कि यूआई का अद्यतन या मूल्य को एक टुकड़े से दूसरे में पारित करने का तरीका समस्या है। मेरा उद्देश्य खंड (DishDetailView) को खंड (AllDishes) से खोलना है और पहले से दूसरे टुकड़े तक एक स्ट्रिंग पास करना है। तो वास्तव में मुझे गतिविधि की आवश्यकता नहीं है लेकिन बिना मैं स्ट्रिंग पास करने में सक्षम नहीं था।

enter image description here

सभी व्यंजन (टुकड़ा)

@Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Dish dish = ca.getItem(position);

                Intent intent = new Intent(rootView.getContext(), DishDetailsViewActivity.class);
                intent.putExtra("nameToPass" , dish.name);
                startActivity(intent);
            }

DishDetailView (टुकड़ा)

public class DishDetailView extends Fragment {

    public View onCreateView(
            LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState
    ) {
        View rootView = inflater.inflate(R.layout.fragment_dishdetailview, container, false);

        String tempHolder = getActivity().getIntent().getStringExtra("nameToPass");

        TextView name = rootView.findViewById(R.id.textview_view_dishName);

        name.setText(tempHolder);

        rootView.invalidate();

        return inflater.inflate(R.layout.fragment_dishdetailview, container, false);
    }
}

DishDetailsViewActivity (गतिविधि)

public class DishDetailsViewActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dish_details_view);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }
}

fragment_dishdetailview.xml (टुकड़ा लेआउट)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/screen_background"
    tools:context=".fragments.DishDetailView">

    <TextView
        android:id="@+id/textview_view_dishName"
        android:layout_width="300dp"
        android:layout_height="27dp"
        android:layout_marginStart="24dp"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="20dp"
        android:textColor="@color/headercolor"
        android:textSize="@dimen/header_fontsize"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

** content_dish_details_view.xml (गतिविधि लेआउट)**

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/nav_graph3" />
</androidx.constraintlayout.widget.ConstraintLayout>

nav-graph.xml

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/nav_graph3"
    app:startDestination="@id/fragment_dishdetailview">

    <fragment
        android:id="@+id/fragment_dishdetailview"
        android:name="com.example.nutritracker.fragments.DishDetailView"
        android:label="DishDetailView"
        tools:layout="@layout/fragment_dishdetailview">
    </fragment>
</navigation>
1
L4c0573 26 मार्च 2020, 20:43

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि आपको अपना rootView onCreateView DishDetailView की विधि पर वापस करना चाहिए।

1
Luca 26 मार्च 2020, 18:15