При использовании BottomNavigation с Android Navigation Component в корпоративном приложении мы сталкиваемся с несколькими проблемами:
- Обработка обратного стека в сочетании с BottomNavigation, которая имеет обходной путь в Google Samples.
- Использование общей панели инструментов с динамиком c обновления меню
- Android Скрытие / отображение нижней навигации в разных фрагментах
Мы закончили с этим решением:
В нашей деятельности мы устанавливаем прослушиватель для компонента навигации:
findNavController().addOnDestinationChangedListener(this)
override fun onDestinationChanged(controller: NavController, destination: NavDestination, arguments: Bundle?) {
//Check Destination
}
Мы определили конфигурации пользовательского интерфейса (Toolbar & BottomNavigation) для каждого фрагмента:
data class UiConfig(val toolbarConfig: ToolbarConfig, val bottomNavigationConfig: BottomNavigationConfig)
data class ToolbarConfig(val showToolbar: Boolean, val title: String, val menu: Int)
data class BottomNavigationConfig(val showBottomNavigation: Boolean)
object UIConfigs {
val uiConfigs = mapOf(
R.id.fragment_id to UiConfig(ToolbarConfig(true, "Title", R.menu.home), BottomNavigationConfig(false)),
...
)
}
И в нашем слушатель при изменении пункта назначения (onDestinationChanged
):
when (destination.id) {
R.id.fragment_id -> {
//Update UI by accessing uiConfigs and getting the info about fragment
//hide/show BottomNavigation
//update your shared Toolbar
//Any shared updates in possible this way
}
else -> throw Exception("No config found for ${destination.label}")
}