我试图使用ViewPager2 + FragmentStateAdapter +导航组件构建以下视图结构/导航。
先决条件:单一活动体系结构,有一个导航图
1.片段A 持有一个视图寻呼机。视图寻呼机使用FragmentStateAdapter。
2.片段B 是通过FragmentStateAdapter (视图寻呼机中的“lives”)实例化的。
3.片段C -应该从片段B导航到B->这就是问题所在。
方法1:从片段B声明的ViewPager2 + FragmentStateAdapter +导航
<fragment android:id="@+id/fragmentA" android:name="com.abc.FragmentA" android:label="FragmentA" /> <fragment android:id="@+id/fragmentB" android:name="com.abc.FragmentB" android:label="FragmentB"> <action android:id="@+id/to_fragmentC" app:destination="@id/fragmentC" /> </fragment> <fragment android:id="@+id/fragmentC" android:name="com.abc.FragmentC" android:label="FragmentC" />
FragmentB执行:
FragmentBDirections .toFragmentC() .let { findNavController().navigate(it) }
结果:
App crash java.lang.IllegalArgumentException: navigation destination com.abc:id/to_fragmentC is unknown to this NavController
方法2:从片段A声明的ViewPager2 + FragmentStateAdapter +导航
<fragment android:id="@+id/fragmentA" android:name="com.abc.FragmentA" android:label="FragmentA" > <action android:id="@+id/to_fragmentC" app:destination="@id/fragmentC" /> </fragment> <fragment android:id="@+id/fragmentB" android:name="com.abc.FragmentB" android:label="FragmentB"> </fragment> <fragment android:id="@+id/fragmentC" android:name="com.abc.FragmentC" android:label="FragmentC" />
FragmentADirections .toFragmentC() .let { findNavController().navigate(it) }
App navigates to FragmentC, but when i hit the back button , it crashes with : java.lang.IllegalArgumentException