【问题标题】:onOptionsItemSelected not called pressing up navigation icon on fragmentonOptionsItemSelected 未调用片段上的向上导航图标
【发布时间】:2015-11-18 16:39:11
【问题描述】:

标题几乎是不言自明的。

架构:

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

我在替换片段之前禁用了 Drawer Toggle 并设置了 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。

【问题讨论】:

    标签: android fragment actionbardrawertoggle up-navigation


    【解决方案1】:

    如果您在抽屉活动中实现 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 将数据传递给您的子片段,因此您可以对 Activity 执行相同操作。

    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);
    

    【讨论】:

    • 感谢您的建议,我已经在MainActivity、ParentFragment和ChildFragment中实现了onOptionsItemSelected方法。我尝试了您的建议,将 MainActivity 方法设置为返回 false,但仍然无法正常工作
    • 仅供参考,我添加到菜单中的所有其他按钮(搜索、刷新等)都有效,并且调用了 onOptionsItemSelected。
    • 你真的需要在那里使用子片段吗?为什么不开始一个新的活动并重用你已经在那里写的那个片段呢?我猜这会简化你的问题。
    • 对不起,我还是个新手,为什么要使用另一个活动而不是片段?我必须将数据从父片段传递给子片段,我设法通过使用 bundle 的片段方法轻松做到这一点。
    • 我开始了一项新活动,一切正常!仍然不知道为什么它在子片段中不起作用,但是更改为新的活动就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    相关资源
    最近更新 更多