簡體   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