繁体   English   中英

从 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:popUpToapp: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

如果您不想导航到fragmentB的新实例,则不需要在操作上使用app:destination="@id/fragmentB" (因为app:destination这样做的)。 因此,您可以使用:

<action
    android:id="@+id/action_fragmentD_to_fragmentB"
    app:popUpTo="@+id/fragmentB" />

这与调用popBackStack(R.id.fragmentB, false) - 即弹出回到fragmentB ,但不弹出fragmentB本身。

您可以使用类SingleLiveEvent来保留以前的状态,因为它在需要时仅发出一次数据。

了解有关 SingleLiveEvent 的更多信息:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM