Есть ли способ, как перейти к месту назначения и добавить еще один в бэкстек в NavigationManager? - PullRequest
1 голос
/ 28 мая 2019

Привет, я новичок в Android NavigationManager.

Рассмотрим фрагменты A, B и C, соединенные в nav_graph, как показано на рисунке. scheme

По сути, я пытаюсь перейти от фрагмента А непосредственно к С. Но, нажимая кнопку «Назад», я хочу, чтобы она вел себя так, как если бы я был первым во фрагменте В.

Итак, A-> C, на кнопках назад: C-> B-> A

Есть ли какой-нибудь способ, как я мог бы добавить фрагмент B в backstack, фактически не показывая его с помощью NavigationManager?

Спасибо.

1 Ответ

2 голосов
/ 28 мая 2019

Так что, похоже, я должен быть более осторожным при чтении документации.Я пропустил этот сайт .

Существует механизм для настраиваемого поведения спины.Все, что мне нужно было сделать, это добавить этот код во фрагмент класса C:

//use onResume if you want to handle orientation change
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val callback = requireActivity().onBackPressedDispatcher.addCallback(this, object :
        OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            val options = NavOptions.Builder()
                .setPopUpTo(R.id.fragmentC, true)
                .build()

            navController.navigate(R.id.fragmentB, options)
        }
    })
}

Мое мышление было неправильным все время.Я пытался добавить B в backstack при запуске C. Вместо этого во фрагменте C при нажатой кнопке «назад» шел вперед к B и удалял C из backstack.

...