Android 根据片段和活动按下后退按钮时如何同步动作栏
我正在研究菜单和工具栏/操作栏。我试着这样做:一个活动容器和许多片段。我为MainActivity(onCreate)创建并设置了一个工具栏作为actionbar: 然后从片段1调用片段2,并按照相同的方式进行设置: 要处理后退按钮,请在Android 根据片段和活动按下后退按钮时如何同步动作栏,android,android-actionbar,fragment,toolbar,back-button,Android,Android Actionbar,Fragment,Toolbar,Back Button,我正在研究菜单和工具栏/操作栏。我试着这样做:一个活动容器和许多片段。我为MainActivity(onCreate)创建并设置了一个工具栏作为actionbar: 然后从片段1调用片段2,并按照相同的方式进行设置: 要处理后退按钮,请在onOptionsItemSelected中的片段中单击: return if (item.itemId == android.R.id.home) { activity?.onBackPressed() true } else r
onOptionsItemSelected
中的片段中单击:
return if (item.itemId == android.R.id.home) {
activity?.onBackPressed()
true
} else return when (item?.itemId){
...
}
else -> super.onOptionsItemSelected(item)
}
并在Main活动中覆盖反压的on
:
override fun onBackPressed() {
if(supportFragmentManager.backStackEntryCount > 0){
supportFragmentManager.popBackStackImmediate()
}else{
super.onBackPressed()
}
}
问题是:如果我点击后退按钮,它会按预期后退,但会显示动作栏的最后一个对象。在MainActivity中,仅按预期显示动作ITEN:
如何根据片段和活动同步酒吧
注:
- 我正在使用Kotlin,但欢迎使用Java解决方案(转换为Kotlin) (稍后)
- 片段被添加到后堆栈中
- 我找到了解决办法。我离开这里是为了任何感兴趣的人:
我在backbackbackchangedListener上应用了
来监视后堆栈上的更改。然后,您可以在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,则根活动显示在屏幕上。
这可以用于对您想要更改的任何片段进行更改。
就这样
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
}
}