【问题标题】:How to listen to Fragment Change in Navigation Component?如何收听导航组件中的片段变化?
【发布时间】:2021-11-15 20:41:43
【问题描述】:

如何在新的导航组件中添加片段更改侦听器?

我有一个 BottomNavigationView,我在 official sample 之后使用了新的导航组件

我的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)
})

当 4 个导航图中的任何一个片段发生更改时,我希望在我的 MainActivity 中有一个监听器。

controller 仅在BottomNavigationView 目标之间切换时有效。

【问题讨论】:

    标签: android android-fragments android-architecture-navigation


    【解决方案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()
    }
    

    【讨论】:

    • // 不要忘记初始化 --> 部分将是 navController = Navigation.findNavController(this, R.id.nav_host_fragment) ,其中 nav_host_fragment 是包含 app:navGraph="@navigation/mobile_navigation" 的片段
    【解决方案2】:

    除了 marat 和 vlad 答案之外,如果您在 Xml 中使用 FragmentContainer,您可以通过以下方式访问它的导航控制器:

    val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment 
    val navController = navHostFragment.navController
    

    否则可能会遇到没有导航控制器的活动的 IllegalStateException

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      相关资源
      最近更新 更多