我有一个活动,可以包含几个片段。每个片段都可以在ActionBar中拥有自己的菜单条目。到目前为止,此工作正常,每个项目都是可点击的,并执行所需的操作。
我的问题如下。在MainActivity中,我声明了以下几行来拦截对ActionBar的HomeIcon的调用:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
clearBackStack();
setHomeFragment();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
我在Activity中声明它,因为我希望每个Fragment都应该调用它,这样我就不必捕获每个片段中的android.R.id.home情况。
在一个片段中,我使用的是setDisplayHomeAsUpEnabled(true),这样我就可以获得ActionBar图标左侧的小箭头。当在这个片段中单击HomeIcon时,我不想设置HomeFragment,我想设置上次显示的片段。所以我有一个onOptionsItemSelected - 片段中的方法:
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case android.R.id.home:
setLastFragment();
return true;
...
但是,这并不像我希望的那样工作。首先调用Activity的onOptionsItemSelected,捕获MenuItem并重定向到HomeFragment。使用在其他片段中声明的其他MenuItem,我可以检查看到相同的行为。首先调用Activity,不捕获MenuItem(默认情况),然后重定向到super.onOptionsItemSelected(item)。
因此,Android处理菜单点击的情况似乎就是这样。第一个活动,然后是片段。有没有办法改变这个?我不想把android.R.id.home-case放在每个片段中并在那里处理它。有没有更好的方法来做到这一点?