使用 Navigation with BottomNavigationView + FloatingActionButton (FAB) 恢复菜单项状态

Restore menu items states using Navigation with BottomNavigationView + FloatingActionButton (FAB)

如何 setupWithNavController 我的 BottomNavigationView 顶部有一个 FloatingActionButton (FAB)?

Thanks Whosebug for hating me and not letting me display photos. :)

根据导航库版本…

Starting in Navigation 2.4.0-alpha01, the state of each menu item is saved and restored when you use setupWithNavController.

这很有用,但是,当我设置 BottomNavigationView 并按下 FAB 时,会重新加载当前菜单项的状态。我怎样才能实现与使用 FAB 单击任何菜单项相同的行为?

binding.activityMainBottomNavigationView.setupWithNavController(navController)

binding.activityMainFloatingActionButton.setOnClickListener {

    // TODO: Fix navigation.
    navController.navigate(R.id.homeFragment)

    binding.activityMainBottomNavigationView.selectedItemId = R.id.homeFragment      
}

据我了解,调用 navController.navigate() 可能会重置 fragmentContainerView 使用的当前 nav_graph,这就是重新加载当前菜单项的原因。有什么办法可以避免这种情况吗?

经过一周的多次尝试,我使用 NavigationUI 中的 onNavDestinationSelected 达到了预期的目的。

binding.activityMainBottomNavigationView.setupWithNavController(navController)

binding.activityMainFloatingActionButton.setOnClickListener {

    NavigationUI.onNavDestinationSelected(
        binding.activityMainBottomNavigationView.menu.findItem(R.id.homeFragment),
        navController
    )

    binding.activityMainBottomNavigationView.selectedItemId = R.id.homeFragment
}

这样,fragments和navigation的状态就活下来了!

干杯!