Как использовать NavController (с NavHost во фрагменте) во фрагменте, а не в деятельности?
У меня есть MainActivity и в нем у меня есть navController с mainFragment, который служит NavHost для 4 фрагментов (Feed, Notification, Profile и Help). Моя проблема связана с третьим из этих фрагментов, в котором мне также нужен собственный navController с 3 вариантами (действия, достижения и редактирование профиля). Я попытался создать то же самое, что и в MainActivity, с фрагментом NavHost во фрагменте профиля, но андроид не принял его таким образом, и я не смог найти ни одного примера поиска в Google. Кто-нибудь знает как это решить?
https://developer.android.com/reference/kotlin/androidx/navigation/NavController
Это следует за тем, как я реализовал в MainActivity, этот "bottomNavigationView" - это меню, созданное для перехода между фрагментами:
navController = Navigation.findNavController(this, R.id.main_fragment);
navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
navDestination = destination;
switch (destination.getId()) {
case R.id.feed:
bottomNavigationView.setCurrentActiveItem(0);
break;
case R.id.alerts:
bottomNavigationView.setCurrentActiveItem(1);
break;
case R.id.profile:
bottomNavigationView.setCurrentActiveItem(2);
break;
case R.id.help:
bottomNavigationView.setCurrentActiveItem(3);
break;
}
});
bottomNavigationView.setNavigationChangeListener((view, position) -> {
switch (position) {
case 0:
if (navDestination.getId() != R.id.feed) {
titleHeaderMain.setText(R.string.publicacao);
titleHeaderMain.setGravity(View.TEXT_ALIGNMENT_CENTER);
navController.navigate(R.id.feed);
}
break;
case 1:
if (navDestination.getId() != R.id.alerts) {
titleHeaderMain.setText(R.string.notificacoes);
navController.navigate(R.id.alerts);
}
break;
case 2:
if (navDestination.getId() != R.id.profile) {
titleHeaderMain.setText(R.string.perfil);
navController.navigate(R.id.profile);
}
break;
case 3:
if (navDestination.getId() != R.id.help) {
titleHeaderMain.setText(R.string.ajudar);
navController.navigate(R.id.help);
}
break;
}
});
0 ответов
Вы должны переосмыслить свой путь навигации. У меня была такая же проблема, но это не сработало. Пришлось его переделать.
Я помещаю нижнюю навигацию только в действие и скрываю или показываю ее в зависимости от пункта назначения.