![](/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.