我正在使用一些最新的Android Jetepack组件在Kotlin中开发一个应用程序。最近,我遇到了以下情况:
当将BottomNavigationView
与NavController
一起使用时,以及每个Fragment
都有自己的Toolbar
时,似乎会发生此问题。问题是,当从片段A过渡到片段B时,对 titles 和 ActionBar导航图标的更改会在Fragment A 和 B中进行更新。 ,为了实现平稳过渡,片段A中的AppBar的状态将不会发生变化。我怀疑这可能是由于这些属性不“属于” Toolbar
,因为这并非事实”似乎以相同的方式影响工具栏的菜单项。
AppBar标题的变通方法是在其各自的fragment_layout.xml中设置每个工具栏的title属性,同时还从navFragment.xml中删除label属性(通常负责设置AppBar的标题文本)使用navController时)。
但是,这不能解决没有出现在顶级目的地上但在其他目的地上出现的actionBar导航图标(例如“向上/首页”按钮)的问题。因此,就我而言,它仍然显得很简陋。
我已经按照以下步骤连接了导航:
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)
}
半路!