Как предотвратить отображение предыдущего фрагмента после нажатия кнопки «Назад» с помощью контроллера навигации? - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь использовать навигационный контроллер прямо сейчас.Я хочу перейти с LoginFragment на HomeFragmentLoginFragment я использую этот код ниже, чтобы перейти к HomeFragment.

Navigation.findNavController(view).navigate(homeDestination)

Однако, когда я нажимаю кнопку «Назад» в HomeFragment, она возвращается к LoginFragment, я ожидаючто когда я нажимаю кнопку, приложение закрывается.

По-старому, если я использую активность вместо Fragment, я обычно делаю что-то подобное, чтобы получить ожидаемое поведение:

val intent = Intent(this,HomeActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)

Используя эти флаги, я использую, чтобы получить ожидаемое поведение.Но я не знаю, как реализовать то же поведение с помощью контроллера навигации.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Я думаю, что это должно сработать.

NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentLogin, true);
controller.navigate(homeDestination)
0 голосов
/ 28 февраля 2019

Навигация предлагает атрибуты popUpTo и popUpToInclusive для удаления фрагментов из заднего стека в рамках операции navigate().

Это можно установить в XML:

<!-- Add to your Navigation XML, then use navigate(R.id.go_home) -->
<action
  android:id="@+id/go_home"
  app:destination="@+id/home_fragment"
  app:popUpTo="@+id/destination_to_pop"
  app:popUpToInclusive="true"/>

Или установить его программно:

NavOptions navOptions = new NavOptions.Builder()
    .setPopUpTo(R.id.destination_to_pop, true)
    .build();
Navigation.findNavController(view).navigate(homeDestination, navOptions)

Вы также можете использовать идентификатор элемента <navigation>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...