Я пытаюсь реализовать навигацию к определенным страницам сведений моего приложения с помощью 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?
Благодаря M.G за указание в правильном направлении мне удалось решить эту проблему, вручную создав backstack с помощью библиотеки навигации. Это означает последовательный вызов findNavController(...).navigate(...) несколько раз для создания backstack.
Например, когда я делаю ссылку на фрагмент 3, но хочу вернуться к фрагментам 1 и 2, я вызываю:
findNavController.navigate(R.id.fragment1, ...)
findNavController.navigate(R.id.fragment2, ...)
findNavController.navigate(R.id.fragment3, ...)
это ожидаемое поведение при вызове navigatesUp () из фрагмента 3 для перехода к фрагменту 1, потому что это фрагмент в стеке, а фрагмент 2 еще не создан. поэтому, если вы хотите изменить это поведение, вы должны сделать это вручную, потому что navigateUp () переходит к предыдущему фрагменту.