我有一个可以包含多个片段的活动。每个片段都可以在 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 都应该调用它,这样我就不必在每个 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。使用在其他片段中声明的其他 MenuItems,我可以检查看到相同的行为。首先调用 Activity,不捕获 MenuItem(默认情况),然后重定向到 super.onOptionsItemSelected(item)。
所以看起来这就是Android如何处理菜单点击的情况。第一个活动,然后是片段。有没有办法改变这个?我不想将 android.R.id.home-case 放在每个片段中并在那里处理。有没有更好的方法来做到这一点?