При использовании компонента «Навигация» легко перейти к следующему фрагменту, а также просто вернуться к предыдущему фрагменту.
Navigation.findNavController(v).navigate(R.id.action1);
/*vs*/
Navigation.findNavController(v).popBackStack();
Как я могу в onViewCreated()
проверить, как были достигнуты фрагменты назначения startDestination / topLevel? Если он был возвращен обратно, я хочу запустить другой код по сравнению с тем, когда он был заново перемещен.
Обновление благодаря @Thracian за предложения:
Я тестировал:
navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
@Override
public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) {
Log.d("MAIN", "New destination ID: " + destination.getDisplayName());
}
});
Но он возвращает тот же результат, независимо от того, перехожу ли я к фрагменту напрямую или использую popBack / navigateUp, поэтому он не помогает отличить.
Я тестировал:
navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
navHostManager = navHostFragment.getChildFragmentManager();
navHostManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
int backStackEntryCount = navHostManager.getBackStackEntryCount();
int fragmentCount = navHostManager.getFragments().size();
Log.e("MAIN","backStackEntryCount: "+backStackEntryCount+", fragmentCount: " + fragmentCount);
}
});
К сожалению, фрагмент, который я пытаюсь решить, - это startDestination. Следовательно, backStackEntryCount
всегда равен 0, когда я его достигаю, как для navigateTo, так и для navigateUp ...
Для других моих пунктов назначения верхнего уровня это также не работает должным образом, поскольку они всегда показывают backStackEntryCount = 1
независимо от того, как я до них добираюсь.