防止 NavigationDrawer 在 Home Button Click 上打开

Prevent NavigationDrawer from opening on Home Button Click

我的主 activity 有一个 NavigationDrawer,在一个实例中,我显示了一个片段,"Hamburger menu" 变成了一个箭头。

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

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

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

把这个放在你的 Activity:

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

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

尝试覆盖选项项 select。

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

我想您需要在工具栏上使用 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){ ...