我有片段:A,B,C,D。我浏览A-> B。片段B从参数获取并保存状态。然后,我导航B->C。然后导航C->D。当我两次呼叫 findNavController().popBackStack()
时,我得到了正确的行为:D-> B和B仍然具有正确的状态。之所以起作用,是因为片段B从未被破坏,仅是它的视图。然后在返回时重新创建视图。但是不建议两次调用popBackStack()。相反,我们应该将操作与app:popUpTo
和app:popUpToInclusive="true"
一起使用:
<action
android:id="@+id/action_fragmentD_to_fragmentB"
app:destination="@id/fragmentB"
app:popUpTo="@+id/fragmentB"
app:popUpToInclusive="true" />
但是它迫使片段B被完全破坏,然后重新创建。以没有以前的状态来填充。
换句话说,当我使用FLAG_ACTIVITY_CLEAR_TOP + FLAG_ACTIVITY_SINGLE_TOP
:https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP
答案 0 :(得分:1)
如果您不想导航到app:destination="@id/fragmentB"
的新实例(因为fragmentB
就是这样做的话),则无需在动作上使用app:destination
。因此,您可以使用:
<action
android:id="@+id/action_fragmentD_to_fragmentB"
app:popUpTo="@+id/fragmentB" />
这与调用popBackStack(R.id.fragmentB, false)
相同-即弹出回到fragmentB
,但不要弹出fragmentB
本身。
答案 1 :(得分:-1)