Есть ли способ перейти к месту назначения и добавить еще один в backtstack в NavigationManager?

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

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

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

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

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


person Yoda066    schedule 28.05.2019    source источник
comment
проверить мой старый ответ на вопрос этого типа.   -  person Nick Bapu    schedule 28.05.2019
comment
@NickBapu Спасибо, но я пытался сделать это, не перезаписывая метод onBack. Вот почему я специально попросил решение с помощью NavigationManager.   -  person Yoda066    schedule 28.05.2019
comment
Посмотрите этот ответ stackoverflow.com/questions/12854105/   -  person Sai Jayant    schedule 28.05.2019


Ответы (1)


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

Существует механизм для пользовательского обратного поведения. Все, что мне нужно было сделать, это добавить этот код в класс фрагмента 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 в задний стек при запуске C. Вместо этого мне нужно было сделать во фрагменте C при нажатии кнопки «Назад» перейти к B и удалить C из обратного стека.

person Yoda066    schedule 28.05.2019