Android 如何在另一个导航抽屉打开时锁定导航抽屉

Android 如何在另一个导航抽屉打开时锁定导航抽屉,android,nullpointerexception,navigation-drawer,Android,Nullpointerexception,Navigation Drawer,我的视野里有两个导航抽屉。当右边的抽屉打开时,我想锁左边的抽屉,当左边的抽屉打开时,我想锁右边的抽屉 如图所示,当(例如)左侧抽屉打开时,您从右侧滑动以将其关闭,则在左侧抽屉完全关闭之前,右侧抽屉开始打开。这是不可取的行为 这是我尝试过的,但是当我刷抽屉时,得到了一个NullPointerException // Left Drawer Config _leftDrawerToggler = new DrawerToggler(this,

我的视野里有两个导航抽屉。当右边的抽屉打开时,我想锁左边的抽屉,当左边的抽屉打开时,我想锁右边的抽屉

如图所示,当(例如)左侧抽屉打开时,您从右侧滑动以将其关闭,则在左侧抽屉完全关闭之前,右侧抽屉开始打开。这是不可取的行为

这是我尝试过的,但是当我刷抽屉时,得到了一个
NullPointerException

// Left Drawer Config
_leftDrawerToggler = new DrawerToggler(this,
                                       _rootViewLayout,
                                       Resource.Drawable.ic_drawer_light,
                                       Resource.String.drawer_open,
                                       Resource.String.drawer_close);

_leftDrawerToggler.DrawerClosed += delegate
    {
        InvalidateOptionsMenu();
        _rootViewLayout.SetDrawerLockMode(DrawerLayout.LockModeUnlocked, _rightDrawerLayout);
    };

_leftDrawerToggler.DrawerOpened += delegate
{
    _leftDrawerList.SetItemChecked(0, true);
    InvalidateOptionsMenu();
    _rootViewLayout.SetDrawerLockMode(DrawerLayout.LockModeLockedClosed, _rightDrawerLayout);
};

_rootViewLayout.SetDrawerShadow(Resource.Drawable.drawer_shadow_dark, (int)GravityFlags.Left);
_rootViewLayout.SetDrawerListener(_leftDrawerToggler);



// Right Drawer Config
_rightDrawerToggler = new DrawerToggler(this,
                                       _rootViewLayout,
                                       Resource.Drawable.ic_drawer_light,
                                       Resource.String.drawer_open,
                                       Resource.String.drawer_close);

_rightDrawerToggler.DrawerClosed += delegate
    {
        InvalidateOptionsMenu();
        _rootViewLayout.SetDrawerLockMode(DrawerLayout.LockModeUnlocked, _leftDrawerLayout);
    };
_rightDrawerToggler.DrawerOpened += delegate
{
    _rightDrawerList.SetItemChecked(0, true);
    InvalidateOptionsMenu();
    _rootViewLayout.SetDrawerLockMode(DrawerLayout.LockModeLockedClosed, _leftDrawerLayout);
};

_rootViewLayout.SetDrawerShadow(Resource.Drawable.right_drawer_shadow_dark, (int)GravityFlags.Right);
_rootViewLayout.SetDrawerListener(_rightDrawerToggler);

问题是您没有锁定右侧视图
视图
。另一个问题是,对于
抽屉布局
,您只需要一个
侦听器
。从您的代码中,我可以理解您的
抽屉布局有两个侦听器

您的
布局
XML
应该有一个
抽屉布局
和两个
列表视图
列表视图的布局
应该是
开始
,另一个
结束

抽屉
打开时检查
视图对象
是否相等
View.equal()
,然后锁定另一个
ListView',当“抽屉
关闭时解锁另一个
ListView

像这样更改代码

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_drawer_layout);

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mLeftDrawerList = (ListView) findViewById(R.id.left_drawer);
    mRightDrawerList = (ListView) findViewById(R.id.right_drawer);

    mDrawerToggle = new ActionBarDrawerToggle(this,
            mDrawerLayout,R.drawable.ic_drawer,
            R.string.drawer_open,R.string.drawer_close)
    {
        public void onDrawerOpened(View view){
            if(view.equals(mRightDrawerList)) {
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mLeftDrawerList);
            }
            else {
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mRightDrawerList);
            }
            invalidateOptionsMenu();
        }

        public void onDrawerClosed(View view)
        {
            if(view.equals(mRightDrawerList)) {
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, mLeftDrawerList);
            }
            else {
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, mRightDrawerList);
            }
            invalidateOptionsMenu();
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);
}

这应该行得通。如果您发现任何问题,请告诉我

成功了。我刚刚将其添加到我的DrawerToggler助手类中,并将
\u leftLayout
\u righLayout
添加到重载构造函数中。像冠军一样工作!