从 D 导航返回时防止破坏(或恢复状态)片段 B - 导航组件
Prevent destroying (or restore state) of Fragment B when navigating back from D - Navigation Component
我有片段: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被完全销毁然后重新创建。 Bu 没有以前的状态。
换句话说,我想在使用时实现与活动相同的行为FLAG_ACTIVITY_CLEAR_TOP + FLAG_ACTIVITY_SINGLE_TOP
:https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP
您可以使用 class SingleLiveEvent 来保留之前的状态,因为它只在需要时发出一次数据。
了解有关 SingleLiveEvent 的更多信息:
如果您不想导航到 fragmentB
的新实例(因为 app:destination
就是这样做的),则无需对操作执行 app:destination="@id/fragmentB"
。因此你可以使用:
<action
android:id="@+id/action_fragmentD_to_fragmentB"
app:popUpTo="@+id/fragmentB" />
这与调用 popBackStack(R.id.fragmentB, false)
相同 - 即弹出回 fragmentB
,但不弹出 fragmentB
本身。
我有片段: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被完全销毁然后重新创建。 Bu 没有以前的状态。
换句话说,我想在使用时实现与活动相同的行为FLAG_ACTIVITY_CLEAR_TOP + FLAG_ACTIVITY_SINGLE_TOP
:https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP
您可以使用 class SingleLiveEvent 来保留之前的状态,因为它只在需要时发出一次数据。
了解有关 SingleLiveEvent 的更多信息:
如果您不想导航到 fragmentB
的新实例(因为 app:destination
就是这样做的),则无需对操作执行 app:destination="@id/fragmentB"
。因此你可以使用:
<action
android:id="@+id/action_fragmentD_to_fragmentB"
app:popUpTo="@+id/fragmentB" />
这与调用 popBackStack(R.id.fragmentB, false)
相同 - 即弹出回 fragmentB
,但不弹出 fragmentB
本身。