使用 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的状态就活下来了!
干杯!
如何 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的状态就活下来了!
干杯!