当前位置: 首页 > 知识库问答 >
问题:

AppCompat v7工具栏onOptionsItemSelected未调用

莫繁
2023-03-14

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

我必须为它实现一些特殊的侦听器吗?在一切顺利之前。

编辑:初始化操作栏:

mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
mActionBar = getSupportActionBar();
mActionBar.setHomeButtonEnabled(true);

用片段替换内容后,我这样做:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
mDrawerToggle.setDrawerIndicatorEnabled(false);
mActionBar.setDisplayHomeAsUpEnabled(true);

共有3个答案

侯善
2023-03-14

我在使用setSupportActionBar()方法时遇到了几个问题。它也会忽略某些颜色主题,因此无法设置后向箭头或溢出图标的样式(不记得是哪个)。我刚刚取消了ActionBar集成,并以本机方式使用工具栏。因此,作为一种替代方法,您可以按如下方式进行操作。

只需像通常一样在布局中包含工具栏,假设它使用@id/tools bar的id。

然后,在代码中:

_toolbar = (Toolbar) findViewById(R.id.toolbar);
_toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        handleNavButtonPress();
    }
});
_toolbar.setOnMenuItemClickListener(_menuItemClickListener);
_toolbar.inflateMenu(R.menu.message_list_menu);
Menu menu = _toolbar.getMenu();

在这种情况下,\u menuItemClickListener几乎可以是您当前重命名的onOptions ItemSelected()方法。您不必再检查菜单是否为空。

要从菜单中删除项目,只需调用菜单-

最后一点,要使它全部工作,您必须完全禁用操作栏并将其从样式中删除。

吕琪
2023-03-14

我必须为抽屉切换实现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);
    }
});

这解决了我的问题。

阳光辉
2023-03-14

我知道这个问题已经得到了回答,但是经过两天的沮丧,我找到了问题的真正原因。

看看ActionBarDrawerTokgle留档:https://developer.android.com/reference/android/support/v7/app/ActionBarDrawerToggle.html

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

使用第一个构造函数后,调用了onOptionsItemSelected(),没有出现任何问题。

别忘了调用ActionBarDrawerToggle。从活动中选择OnConfiguration Changed()和OnOptions ItemSelected(),如最后一部分所述:http://developer.android.com/training/implementing-navigation/nav-drawer.html

 类似资料:
  • 我有一个动作和一个碎片。活动没有膨胀的菜单,而片段有一个带有两个按钮的菜单。片段菜单是可见的,但按钮没有任何反应时,轻点。在调试过程中,我可以看到Fragment和Activity的onCreateOptionsMenu()都被调用,但是当点击按钮时,没有onOptionsItemSelected()被调用,既没有从Activity调用,也没有从Fragment调用。

  • 尝试在和中捕获它,如 并且我在中有。

  • 这似乎不再起作用了。SetSupportActionBar需要一个AndroidX.appcompat.widget.Toolbar类型的参数,它不能用于Android.support.v7.widget.Toolbar。另外,如果我使用AndroidX工具栏而不是V7工具栏,它仍然无法工作。 有人面临类似的问题吗?

  • 我可以在工具栏中看到后退按钮,但当我单击时,什么都没有发生。它不会,但当我删除的整个实现时,后退按钮工作正常。我需要在需要时在两者之间切换。提前感谢。

  • 底部导航,有图标和文字,响应鼠标事件和当前页面导航 <nav class="bar bar-tab">   <a class="tab-item external active" href="#">     <span class="icon icon-home"></span>     <span class="tab-label">文案</span>   </a>   <a clas

  • 工具栏是位于屏幕底端的固定(在固定和穿透布局类型中)区域,它包含导航元素。 工具栏不包含任何其他部分,内部只含有普通文本。 工具栏布局 工具栏布局非常简单: <div class="toolbar"> <div class="toolbar-inner"> <a href="#" class="link">Link 1</a> <a href="#" cla