【问题标题】:Prevent NavigationDrawer from opening on Home Button Click防止导航抽屉在主页按钮单击时打开
【发布时间】:2015-04-21 19:46:15
【问题描述】:

我的主要活动有一个 NavigationDrawer,在一个实例中,我显示了一个片段,“汉堡菜单”变成了一个箭头。

当片段显示时,我禁用了通过滑动打开抽屉的功能

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

它工作正常,但现在的问题是用户仍然可以通过单击主页按钮“箭头”来打开抽屉。我希望箭头充当后退按钮而不打开抽屉,那么如何阻止抽屉打开?

【问题讨论】:

  • setHasOptionsMenu(true) ?
  • @SachinGutte 是的
  • 您使用的是操作栏还是工具栏?或将工具栏设置为 supportActionBar?这也是在你的片段中完成的吗?或托管活动
  • @inner_class7 将工具栏设置为 SupportActionBar

标签: android navigation-drawer


【解决方案1】:

我猜你需要在工具栏上使用setNavigationOnClickListener() 来覆盖抽屉行为。

喜欢-

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {
        // logic to decide if drawer open/close, or pop fragment etc
     }
});

这确实可以防止通过单击图标打开抽屉。但它确实通过滑动打开。但是你已经照顾好了。所以这应该可行。

注意这仅在您通过调用设置ActionBarDrawerToggle 后有效

mDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout,  toolbar, R.string.openDrawer, R.string.closeDrawer){ ...

【讨论】:

  • ahhhh 这就是问题所在,我之前尝试过,但我从未收到回调,但就像你说的那样,我必须在调用构造函数后这样做
【解决方案2】:

把它放在你的活动中:

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (item.getId() == android.R.id.home){
        doSomething(); //can be a finish()
    }
}

或者,from this answer

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

【讨论】:

  • setToolbarNavigationClickListener 从未被调用,而且 onClick 中的代码将隐藏我不想要的主页按钮,抽屉指示器应该像 Gmail 应用程序中一样充当后退按钮
【解决方案3】:

您可以尝试覆盖 onOptionsItemSelected 检查 id android.R.id.home 并调用 finish() 以返回您之前的活动。

【讨论】:

  • onOptionsItemSelected 永远不会被调用,我不想完成我正在进行的活动,我只想删除片段
  • 关于它没有被调用,你有没有声明 getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true);在你的活动中。如果没有,您可以尝试添加这些吗?关于完成()的事情,你可以使用你的片段管理器来删除你的片段。
  • 添加那些没有区别
  • 在将汉堡改为箭头之前,按下汉堡时,您的代码是否通过 onOptionsItemSelected() ?
  • 不,它没有,但是阅读@joaquin 的链接一个人建议我使用了错误的构造函数。我更改了我的构造函数,而不是我的 onOptionsItemSelected 在我的 Activity 中被调用,但我仍然无法阻止抽屉打开
【解决方案4】:

尝试覆盖选项项选择。

   @Override
    public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
             case android.R.id.home :
                // do what you want
                return true;
          }
          return true;
       }

【讨论】:

  • 就像我对其他人说的那样,这不会被调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
相关资源
最近更新 更多