【发布时间】:2023-03-14 01:23:01
【问题描述】:
我正在研究菜单和工具栏/操作栏。我正在尝试这种方式:一个活动容器和许多片段。我创建并设置了一个工具栏作为 MainActivity (onCreate) 的操作栏:
val myToolbar = this.findViewById<Toolbar>(R.id.myToolbar)
setSupportActionBar(myToolbar)
然后,我使用onCreateOptionMenu 以正常方式添加itens,并使用onOptionsItemSelected 处理点击
当调用 Fragment 1 时,我更改操作栏并添加返回按钮,如下所示(onCreate):
val actBar = (activity as AppCompatActivity).supportActionBar
actBar?.setDisplayHomeAsUpEnabled(true)
actBar?.setDisplayShowHomeEnabled(true)
actBar?.setDisplayUseLogoEnabled(false)
actBar?.title = "Fragment 1 toolbar"
actBar?.subtitle = ""
setHasOptionsMenu(true)
然后从 Fragment 1 调用 Fragment 2 并以相同的方式设置:
要处理片段中的后退按钮点击,在onOptionsItemSelected:
return if (item.itemId == android.R.id.home) {
activity?.onBackPressed()
true
} else return when (item?.itemId){
...
}
else -> super.onOptionsItemSelected(item)
}
并在 MainActivity 中覆盖 onBackPressed:
override fun onBackPressed() {
if(supportFragmentManager.backStackEntryCount > 0){
supportFragmentManager.popBackStackImmediate()
}else{
super.onBackPressed()
}
}
问题是:如果我单击后退按钮,它会按预期返回,但会显示操作栏的最后一个对象。在 MainActivity 中,仅按预期显示操作项:
如何根据片段和活动同步栏?
注意:
我正在使用 Kotlin,但欢迎使用 Java 解决方案(转换为 kotlin 稍后)
片段被添加到后台堆栈
【问题讨论】:
标签: android android-actionbar fragment toolbar back-button