onOptionsItemSelected未调用压缩片段上的导航图标

时间:2015-11-18 16:39:11

标签: android fragment actionbardrawertoggle up-navigation

标题几乎是自我解释的。

架构:

  • 我有扩展AppCompatActivity的主要活动。
  • 我也有抽屉布局。此菜单的每个选项都会打开一个片段。
  • 每个片段都有自己的菜单布局,由setHasOptionsMenu(true)和自己的按钮组成。菜单的主页按钮仍然可以打开抽屉布局。
  • 其中一个片段包含一个项目列表,当单击其中一个项目时,将打开一个新的子片段。 (这是问题)我希望这个子片段能够通过单击其工具栏上的向上图标导航到其父片段。

在替换片段之前,我禁用抽屉切换并设置Home As Up指示器:

        mDrawerToggle.setDrawerIndicatorEnabled(false);
        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

        actionBar.setHomeAsUpIndicator(R.drawable.ic_arrow_back_white_24dp);
        actionBar.setDisplayHomeAsUpEnabled(true);

然后,当点击UP图标时,没有任何反应。我调试了它,并且没有调用onOptionsItemSelected方法。

仅供参考,我添加到菜单(搜索,刷新等)工作的所有其他按钮和onOptionsItemSelected被调用。

1 个答案:

答案 0 :(得分:4)

如果你在抽屉活动中实现onOptionsItemSelected,它也将不再在片段中被调用,除非你在活动中返回false。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.home:
        return false; //The fragment will take care of it
    default:
        break;
    }
return false;
}

希望它有所帮助!

<强>更新

正如我所说,您还可以尝试启动新活动并在活动中加载该片段。由于您已经通过Bundle将数据传递给子片段,因此您可以对该活动执行相同的操作。

Intent intent = new Intent(getActivity(), NewActivity.class);
Bundle bundle = new Bundle();
bundle.putWhatever(key, value); //There's no such method, just a generalization
intent.putExtras(bundle);
startActivity(intent);