Как прослушать изменение фрагмента в компоненте навигации?

Как я могу добавить прослушиватель изменения фрагмента в новый компонент навигации?

У меня есть BottomNavigationView, в котором я использовал новый компонент навигации после официального образца

У меня в BottomNavigationView четыре пункта назначения, у всех есть свои навигационные графики.

val navGraphIds = listOf(R.navigation.nav_home, R.navigation.nav_discover, R.navigation.nav_search, R.navigation.nav_my)

val controller = bottom_nav.setupWithNavController(
    navGraphIds = navGraphIds,
    fragmentManager = supportFragmentManager,
    containerId = R.id.navHostContainer,
    intent = intent
)

controller.observe(this, Observer { navController ->
    setupActionBarWithNavController(navController)
})

Я хочу иметь слушателя в моем MainActivity при изменении фрагмента в любом из 4 навигационных графиков.

controller действует только при переключении между BottomNavigationView местами назначения.


person musooff    schedule 24.05.2019    source источник


Ответы (1)


Вы пробовали NavController.OnDestinationChangedListener?

private lateinit var controller: NavController // don't forget to initialize

private val listener = NavController.OnDestinationChangedListener { controller, destination, arguments ->
    // react on change
    // you can check destination.id or destination.label and act based on that
}

override fun onResume() {
    super.onResume()
    controller.addOnDestinationChangedListener(listener)
}

override fun onPause() {
    controller.removeOnDestinationChangedListener(listener)
    super.onPause()
}
person Marat    schedule 19.06.2019
comment
// не забываем инициализировать - ›Часть будет navController = Navigation.findNavController(this, R.id.nav_host_fragment), где nav_host_fragment - это фрагмент, содержащий app:navGraph="@navigation/mobile_navigation" - person Rahul Kahale; 06.03.2020