![](/img/trans.png)
[英]Restore recycler view state when navigating back to the fragment - using the jetpacks navigation architecture
[英]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 完全销毁,然后重新创建。 没有以前的状态。
换句话说,我想在使用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.