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

当另一个抽屉菜单打开时如何锁定

周培
2023-03-14

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

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

这是我尝试过的,但当我滑动抽屉时,我得到一个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);

共有1个答案

濮阳旺
2023-03-14

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

您的布局XML应该有一个带有两个ListView的抽屉布局(ListView的布局应该是一个开始,另一个结束)

当抽屉打开时,检查查看对象是否相等。equal(),然后锁定另一个列表视图,当“抽屉”关闭时,解锁另一个列表视图。

像这样更改代码

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

这应该行得通。如果你看到任何问题,请告诉我。

 类似资料:
  • 这是点击事件。 这是xml 结果将显示在片段中,但抽屉菜单仍然显示。我该怎么做才能关闭它?任何人都给我建议,如何解决这个问题,任何帮助非常感谢。谢谢你。

  • 我正在尝试制作一个下拉菜单,其中。单击时会显示下拉内容,如果用户单击栏中的任何其他下拉列表,下拉内容将消失。问题是我有多个下拉列表,我想我只是需要帮助修改我现有的javascript。我希望侧边栏(nav)只显示当前活动的下拉菜单。在“我的代码”上,当您打开下拉列表时,它仍然会打开,直到用户再次单击下拉箭头以关闭该特定下拉列表。

  • 你好,我有一个关于Android导航抽屉的问题。我在我的应用程序中包含了导航抽屉,一切都很顺利,但我想将图像添加到列表中的每个菜单中。 我是Android新手,所以如果有人能帮助我,我将不胜感激,这是导航抽屉的源代码 http://javatechig.com/android/navigation-drawer-android-example 这是我的WebViewFragments文件 这是我的

  • 我正在使用developer.android.com指南来构建一个应用程序。我在Android Studio做新项目时选择了“导航:导航抽屉”。我已经在互联网上搜索我的问题的答案,但我没有找到任何有效的。抱歉,我是编程新手。 在导航抽屉中单击时,如何使应用程序在主视图中打开一个新的片段? 在导航抽屉中单击时,是否可以使用选项卡打开多个可滑动的片段? 如何使“标题”可展开/可折叠? http://d

  • 我在我的应用程序中以稍微不同的方式实现了抽屉菜单。但是抽屉不能顺利地打开或关闭。它在两者之间滞后。在谷歌应用程序中,抽屉菜单是如此流畅。我是如何实现的?这个问题已经在这里问过了,但它没有满足我的需求。请帮助! XML Java语言

  • 我知道这是查询已经在这里回答但我不知道为什么我的代码没有工作 我有两个列表,当第一个列表改变时,其他列表会更新,这是我的代码 这是我的后盾: 如果有人能在这方面提供帮助,或者给我一个很好的教程,我会非常感激的,提前谢谢