58
задан 15 November 2018 в 12:20

5 ответов

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

navController.popBackStack(R.id.fragment_apps, true);
navController.navigate(R.id.fragment_company);

, первая строка удаляет заднюю Стопку, пока это не достигает фрагмента, указанного в моем случае, это - домашний фрагмент, таким образом, это, удаляет всю заднюю стопку полностью, и когда пользователь нажимает назад в fragment_company, он закрывает приложение.

7
ответ дан 1 November 2019 в 13:54

Я думаю, что Ваш вопрос конкретно принадлежит о том, как использовать Поп-Поведение / Поп К / app:popUpTo (в xml)

В документации,
Всплывающее окно данному месту назначения перед навигацией. Это выталкивает все места назначения несоответствия от задней стопки, пока это место назначения не найдено.

Пример (Простое приложение поиска Задания)
мой график start_screen_nav похож на это:

startScreenFragment (start) -> loginFragment -> EmployerMainFragment

                            -> loginFragment -> JobSeekerMainFragment

, если я хочу перейти к EmployerMainFragment и вытолкать весь включая [1 113] startScreenFragment затем, код будет:

        <action
            android:id="@+id/action_loginFragment_to_employerMainFragment"
            app:destination="@id/employerMainFragment"

            app:popUpTo="@+id/startScreenFragment"
            app:popUpToInclusive="true" />

, если я хочу перейти к EmployerMainFragment и вытолкать весь , исключая [1 114] startScreenFragment затем, код будет:

        <action
            android:id="@+id/action_loginFragment_to_employerMainFragment"
            app:destination="@id/employerMainFragment"

            app:popUpTo="@+id/startScreenFragment"/>

, если я хочу перейти к EmployerMainFragment и поп loginFragment, но не startScreenFragment затем код будет:

        <action
            android:id="@+id/action_loginFragment_to_employerMainFragment"
            app:destination="@id/employerMainFragment"

            app:popUpTo="@+id/loginFragment"
            app:popUpToInclusive="true"/>

ИЛИ

        <action
            android:id="@+id/action_loginFragment_to_employerMainFragment"
            app:destination="@id/employerMainFragment"

            app:popUpTo="@+id/startScreenFragment"/>
4
ответ дан 1 November 2019 в 13:54

Можно переопределить спину, нажатую основного действия как это:

override fun onBackPressed() {

  val navigationController = nav_host_fragment.findNavController()
  if (navigationController.currentDestination?.id == R.id.firstFragment) {
    finish()
  } else if (navigationController.currentDestination?.id == R.id.secondFragment) {
    // do nothing
  } else {
    super.onBackPressed()
  }

}
1
ответ дан 1 November 2019 в 13:54

Вот то, как я делал его.

 //here the R.id refer to the fragment one wants to pop back once pressed back from the newly  navigated fragment
 val navOption = NavOptions.Builder().setPopUpTo(R.id.startScorecardFragment, false).build()

//now how to navigate to new fragment
Navigation.findNavController(this, R.id.my_nav_host_fragment)
                    .navigate(R.id.instoredBestPractice, null, navOption)
1
ответ дан 1 November 2019 в 13:54
    NavController navController 
    =Navigation.findNavController(requireActivity(),          
    R.id.nav_host_fragment);// initialize navcontroller

    if (navController.getCurrentDestination().getId() == 
     R.id.my_current_frag) //for avoid crash
  {
    NavDirections action = 
    DailyInfoSelectorFragmentDirections.actionGoToDestionationFragment();

    //for clear current fragment from stack
    NavOptions options = new 
    NavOptions.Builder().setPopUpTo(R.id.my_current_frag, true).build();
    navController.navigate(action, options);
    }
1
ответ дан 1 November 2019 в 13:54

Другие вопросы по тегам:

Похожие вопросы: