Воссоздание бэкстека с помощью компонента архитектуры навигации Android

Я пытаюсь реализовать навигацию к определенным страницам сведений моего приложения с помощью PendingIntent из уведомления, однако у меня возникают проблемы с воссозданием backstack со страницы сведений на всем пути обратно к начальному месту назначения.

Я сделал образец приложения здесь с одним действием и тремя фрагментами для демонстрации этого:

Fragment 1   ->   Fragment 2  ->  Fragment 3
(start dest) <-               <-

Из фрагмента 1 (начальный пункт назначения) я перехожу непосредственно к фрагменту 3, используя

    Navigation.findNavController(this, R.id.nav_host_fragment).navigate(R.id.fragment2,
            null,
            NavOptions.Builder()
                    .build())

Из фрагмента 3, когда я вызываю Navigation.findNavController(this,R.id.nav_host_fragment).navigateUp(), я возвращаюсь к фрагменту 1. Есть ли способ заставить это перейти к только что созданному фрагменту 2?


comment
это ожидаемое поведение при вызове navigatesUp () из фрагмента 3 для перехода к фрагменту 1, потому что это фрагмент в стеке, а фрагмент 2 еще не создан. поэтому, если вы хотите изменить это поведение, вы должны сделать это вручную, потому что navigateUp () переходит к предыдущему фрагменту.   -  person Mycoola    schedule 20.08.2018


Ответы (1)


Благодаря M.G за указание в правильном направлении мне удалось решить эту проблему, вручную создав backstack с помощью библиотеки навигации. Это означает последовательный вызов findNavController(...).navigate(...) несколько раз для создания backstack.

Например, когда я делаю ссылку на фрагмент 3, но хочу вернуться к фрагментам 1 и 2, я вызываю:

findNavController.navigate(R.id.fragment1, ...)
findNavController.navigate(R.id.fragment2, ...)
findNavController.navigate(R.id.fragment3, ...)
person limdale    schedule 06.03.2019