我正在使用一些最新的 Android Jetepack 组件在 Kotlin 中开发一个应用程序。我最近遇到了以下情况:
当使用BottomNavigationView
withNavController
并且每个Fragment
都有自己的Toolbar
. 问题是当从 Fragment A 过渡到 Fragment B 时, Fragment A和B 中对标题和ActionBar 导航图标的更改会更新。理想情况下,为了平滑过渡,Fragment A 中 AppBar 的状态不会发生变化。怀疑这可能源于这些属性不“属于”的事实,因为这似乎不会以同样的方式影响工具栏的菜单项。Toolbar
AppBar 标题的解决方法是在其各自的 fragment_layout.xml 中设置每个 Toolbar 的 title 属性,同时还从 navFragment.xml 中删除 label 属性(通常在使用时负责设置 AppBar 的标题文本导航控制器)。
但是,这并不能解决诸如向上/主页按钮之类的操作栏导航图标不会出现在顶级目的地但会出现在其他目的地的问题。所以在我的情况下,它仍然显得很笨拙。
我已经按如下方式连接了导航:
MainActivity.kt
class MainActivity : AppCompatActivity() {
lateinit var appBarConfiguration: AppBarConfiguration
lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: MainActivityBinding = DataBindingUtil.setContentView(this, R.layout.main_activity)
navController = Navigation.findNavController(this, R.id.nav_fragment)
appBarConfiguration = AppBarConfiguration(setOf(R.id.fragment_1_main, R.id.fragment_2_main))
binding.bottomNavigationView.setupWithNavController(navController)
}
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
}
ExampleFragment.kt
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(activity as AppCompatActivity).setSupportActionBar(toolbar)
NavigationUI.setupWithNavController(toolbar, (requireActivity() as MainActivity).navController, (requireActivity() as MainActivity).appBarConfiguration)
}
哈!