<অ্যান্ড্রয়েড.ফ্রেগমেন্ট.এপ.ফ্রেগমেন্টস কনটেনারভিউ> বনাম <ফ্রেম> একটি নাভহস্টের দর্শন হিসাবে


9

যখন androidx.fragment.app.FragmentContainerViewনিয়মিত fragmentঅ্যাপের পরিবর্তে একটি নেভহোস্ট হিসাবে ব্যবহার করা হয় তখন ওরিয়েন্টেশন পরিবর্তনের পরে কোনও গন্তব্যে নেভিগেট করতে সক্ষম হয় না।

আমি নিম্নলিখিত ত্রুটি পেয়েছি: java.lang.IllegalStateException: no current navigation node

এটির সঠিকভাবে ব্যবহার সম্পর্কে আমার জানা উচিত বা নেভ উপাদানগুলি ব্যবহারের আমার পদ্ধতি কি ভুল?

একটি দর্শন সহ সাধারণ ক্রিয়াকলাপ এক্সএমএল:


...
    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        app:navGraph="@navigation/nav_simple" />
...

নেভিগেশন কোড:

<?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_legislator.xml"
    app:startDestination="@id/initialFragment">

    <fragment
        android:id="@+id/initialFragment"
        android:name="com.example.fragmenttag.InitialFragment"
        android:label="Initial Fragment"
        tools:layout="@layout/initial_fragment">
        <action
            android:id="@+id/action_initialFragment_to_destinationFragment"
            app:destination="@id/destinationFragment" />
    </fragment>
    <fragment
        android:id="@+id/destinationFragment"
        android:name="com.example.fragmenttag.DestinationFragment"
        android:label="Destination Fragment"
        tools:layout="@layout/destination_fragment" />

</navigation>

এখানে একটি গিথুব রেপো যেখানে আপনি সহজেই বাগটি পুনরুত্পাদন করতে পারেন: https://github.com/dmytroKarataiev/navHostBug


আপনি <fragmentএকটি মধ্যে রাখা প্রয়োজন FragmentContainerView
এপিকপান্ডাফোরস

উত্তর:


18

no current navigation nodeত্রুটি দেখা দেয় যখন কোন গ্রাফ সেট এবং আপনাকে কল করার প্রচেষ্টা navigate()। যদি আপনি কেবল তখনই ব্যবহার করেন FragmentContainerViewএবং কোনও কনফিগারেশন পরিবর্তনের পরে ঘটে থাকে , তবে এটি এই বাগের সাথে সম্পর্কিত হবে যা নেভিগেশন ২.২.০-আরসি0৩ সহ মুক্তির জন্য নির্ধারিত এবং নির্ধারিত।

এই সমস্যাটি নিয়ে কাজ করার জন্য, আপনি হয় আবার স্যুইচ করতে পারেন <fragment>বা সরিয়ে ফেলতে পারেন app:navGraph="@navigation/nav_simple"এবং পরিবর্তে কল করতে পারেন navController.setGraph(R.navigation.nav_simple)


আমি আসলে এই পদ্ধতির চেষ্টা করেছি এবং আমি ঠিক একই ত্রুটি পেয়েছি। আপনি কি রেপোটি পরীক্ষা করে দেখতে এবং এ পদ্ধতির সাথে এটি কাজ করার চেষ্টা করতে সক্ষম হবেন?
Dmytro কারটাইয়েভ

এছাড়াও, এই ক্র্যাশটি কেবল ওরিয়েন্টেশন পরিবর্তনের পরে ঘটে। এটি অন্যান্য সমস্ত সময় কাজ করে।
Dmytro করাতাইভ

আমি আসলে এটি একই ত্রুটি নয় বলে মনে করি, এনএভি কন্ট্রোলার আমার প্রশ্নে শূন্য নয়, তবে এর পিছনের স্ট্যাকটি খালি এবং গ্রাফটি শূন্য।
Dmytro করাতাইভ

আহ, হ্যাঁ, এটি বেশ গুরুত্বপূর্ণ তথ্য, আপনি যা अनुभव করছেন তা মনে হচ্ছে এটি অন্যান্য সমস্যা । আমি এই ইস্যুতে কী চলছে তা নিয়ে আমার উত্তর আপডেট করেছি।
ianhanniballake

ধন্যবাদ, নিখুঁত।
Dmytro করাতিয়েভ

0

ফ্রেগমেন্ট কনটেনারভিউয়ের সাথে ফ্রেগমেন্ট ভিউ প্রতিস্থাপনের জন্য আমি কোনও ব্যাখ্যা দেখতে পাচ্ছি না । এই জন্য এই উত্তর যুক্ত করুন:

কোনও ক্রিয়াকলাপে টুকরো টুকরো হোস্ট করার সাধারণ প্যাটার্নগুলির মধ্যে একটি হ'ল ফ্রেমলাউট। অ্যান্ড্রয়েড সম্প্রদায় বছরের পর বছর ধরে এটি করে আসছে তবে এটি এখন পরিবর্তন হতে চলেছে। অ্যান্ড্রয়েডেক্স টিম আপনার জন্য এটি করার জন্য ফ্রেগমেন্টকন্টেইনর ভিউ নামে এই নতুন ভিউটি চালু করেছে।

আপনাকে যা করতে হবে তা হ'ল আপনার ফ্রেমলআউটটিকে ফ্রেগমেন্ট কনটেনারভিউয়ের সাথে প্রতিস্থাপন করা উচিত এবং সমস্ত কিছু বাক্সের বাইরে চলে আসা উচিত, আপনি খণ্ডের লেনদেন পরিচালনা করার পথে আপনাকে কোনও পরিবর্তন করতে হবে না।

এখানে প্রাপ্ত সুবিধাগুলি হ'ল টুকরোগুলির জন্য জেড-অর্ডারিং নামে পরিচিত the এখানে তারা যে উদাহরণটি ব্যবহার করেছে তা এখানে রয়েছে তবে মূলত এর অর্থ হল, উদাহরণস্বরূপ, দুটি টুকরাগুলির মধ্যে প্রস্থান এবং প্রবেশের ট্রান্সকশন একে অপরের সাথে ওভারল্যাপ হবে না। পরিবর্তে এই ফ্রেগমেন্ট কনটেনারভিউ প্রথমে প্রস্থান অ্যানিমেশন শুরু করতে হবে তারপর প্রবেশ অ্যানিমেশন।

আপনি যদি জিজ্ঞাসা করেন তবে এটি ট্যাগটি প্রতিস্থাপন করতে পারেন? তাহলে উত্তর হ্যাঁ। আপনাকে কেবল অ্যান্ড্রয়েড যুক্ত করতে হবে: ফ্রেগমেন্ট কনটেনারভিউ সংজ্ঞায়িত করার সময় নাম = "আপনার_ক্লাস_নাম" এবং এটি আপনার টুকরাটি তৈরি এবং দেখানোর জন্য হুডের নিচে ফ্রেগমেন্ট ট্রান্সজিশন ব্যবহার করবে। এর অর্থ আপনি এটি প্রতিস্থাপনের জন্য পরে খণ্ড লেনদেন ব্যবহার করতে পারেন।

সূত্র

অ্যান্ড্রয়েড ডক্স


1
আমি লেখক যে প্রশ্নটি জিজ্ঞাসা করেছিলেন তার এই উত্তরটি আমি বিশ্বাস করি না।
আলগোআরান

এটি এখনও ভাল অতিরিক্ত তথ্য।
আরভিবি 84
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.