#android #android-navigation #android-bottomnav
#Android #android-навигация #android-bottomnav
Вопрос:
Я пытаюсь настроить условную навигацию для своих фрагментов, используя компоненты навигации и BottomNavigationView. Текущая настройка (без условий):
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
NavigationUI.setupWithNavController(bottom_navigation, navController)
Общая навигация работает нормально, но я хочу ограничить взаимодействие пользователя с нижней навигацией на основе условий. Если условие не выполняется во время щелчка по пункту меню, это должно привести только к отображению всплывающего окна вместо перехода к следующему фрагменту.
Я уже искал это, но упомянутое там решение предполагает сначала переход к следующему фрагменту, а затем проверку условий, но я хочу избежать этого.
Большое вам спасибо.
Ответ №1:
Выставляйте LiveData
, которые будут транслироваться, которые @Ids
отключены.
class MainViewModel{
val disableNavigation = MutableLiveData<@Ids Int>()
fun invalidateNavigation() {
val canNavigate = ....
if(!canNavigate){
disableNavigation.value = R.id.bottom_nav_item_x
}
}
}
Тогда просто обратите внимание на это:
mainViewModel.observe(viewLifecycleOwner){
//disable the id here
//re-enable the rest of the items
}
Комментарии:
1. Привет, Никола, спасибо за этот ввод — я думал об этом раньше, но не смог добавить «Сообщение об ошибке» для пользователя при попытке нажать на отключенный идентификатор. У вас есть какие-либо идеи о том, как это решить? Я попытался разместить NavigationItemSelectedListener для моего bottom_navigation, но это переопределяется «setupWithNavController» Большое вам спасибо
2. Вы должны отключить элемент в нижнем навигационном представлении. вы также можете отобразить сообщение об ошибке в том же блоке, потому что оно будет вызываться всем, если какой-либо пункт меню в навигационном представлении отключен.