未调用AppCompat v7工具栏onOptionsItemSelected

Inf*_*0re 41 android toolbar android-appcompat android-actionbar android-5.0-lollipop

我从原来的ActionBar更改为AppCompat工具栏和setSupportActionBar(工具栏).当我使用getSupportActionBar()和setDisplayHomeAsUpEnabled(true)作为后退箭头时,单击从不调用onOptionsItemSelected或任何其他侦听器方法.

我必须为它实现一些特殊的监听器吗?一切都工作得很好.

编辑:初始化ActionBar:

mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
mActionBar = getSupportActionBar();
mActionBar.setHomeButtonEnabled(true);
Run Code Online (Sandbox Code Playgroud)

在用Fragment替换内容后,我这样做:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
mDrawerToggle.setDrawerIndicatorEnabled(false);
mActionBar.setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

And*_*psa 116

我知道这个问题已得到解答,但经过2天的挫折后我找到了问题的真正原因.

请查看ActionBarDrawerToggle文档:https: //developer.android.com/reference/android/support/v7/app/ActionBarDrawerToggle.html

注意那里的两个构造函数.我的错误是我正在使用第二个构造函数,它将工具栏作为参数.我花了很长时间才注意到consturctor文档中的最后一行:" 如果要将工具栏设置为活动的ActionBar,请使用ActionBarDrawerToggle(Activity,DrawerLayout,int,int). "

使用第一个构造函数onOptionsItemSelected()后调用没有问题.

不要忘记从您的活动中调用ActionBarDrawerToggle.onConfigurationChanged()onOptionsItemSelected(),如上一部分所述:http://developer.android.com/training/implementing-navigation/nav-drawer.html

  • 这应该是公认的答案,因为现在接受的答案提供了一种解决方法,而不是解决实际问题. (6认同)
  • 哇.那些构造函数有点违反直觉.这绝对是我的问题.谢谢,你刚刚把我的头撞在墙上救了我几个小时! (3认同)
  • 简而言之,如果我理解正确:当将工具栏添加到ActionBarDrawer构造函数的参数时,navuparrow将在抽屉打开时显示,而汉堡包将在抽屉关闭时显示.不会调用主页按钮回调.在没有工具栏作为参数的情况下构造ActionBarDrawer时,我们可以使用主页按钮回调.这意味着我们可以管理片段backstack,例如.如何在Gmail应用程序中同步主页按钮以设置动画效果?同时使用没有工具栏的选项作为paramer汉堡包图标只是没有出现给我.任何解释将不胜感激. (2认同)
  • 谢谢你,也救了我的一天!那里有几十个问题和答案,但没有一个对我有用.我想我们应该为这个问题添加一些关键字,例如 - "导航抽屉不显示汉堡图标"或"导航抽屉未打开菜单图标点击工具栏". (2认同)

Inf*_*0re 28

我必须为DrawerToggle实现一个OnClickListener:

mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        popStackIfNeeded();
        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
        mActionBar.setDisplayHomeAsUpEnabled(false);
        mDrawerToggle.setDrawerIndicatorEnabled(true);
    }
});
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题.