我正在研究菜单和工具栏/操作栏。我正在尝试:一个活动容器和许多片段。我创建并设置了一个工具栏作为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)
要处理后退按钮,请在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中,仅按预期显示动作iten:
如何根据片段和活动来同步栏?
注意:
我正在使用Kotlin,但是欢迎使用Java解决方案(将其转换为kotlin 稍后)
将片段添加到堆栈中
答案 0 :(得分:0)
我找到了解决方案。我为任何感兴趣的人离开这里:
我应用了OnBackStackChangedListener
来监视回退的更改。然后,您可以在UI上进行任何更改。
supportFragmentManager.addOnBackStackChangedListener {
//UI changes
}
在内部,我使用片段容器检查是否有片段电流:
supportFragmentManager.addOnBackStackChangedListener {
val currentFragment = supportFragmentManager.findFragmentById(R.id.you_fragment_container)
if (currentFragment == null){
//rebuild action bar here or make any another changes
}
}
就我而言,我将null表示容器没有片段。因此,如果为null,则在屏幕上显示根活动。 这可用于更改您想要的任何片段。 就是这样。