У меня есть фрагменты: 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