DrawerLayout.openDrawer在第一次使用时不起作用。

24

我在我的activity中使用了android.support.v4.widget.DrawerLayout。只要我使用滑动手势打开它,它就可以正常工作。

然而,当我想通过调用drawer.openDrawer(Gravity.LEFT)来通过按钮点击打开它时,它就无法工作。

但是,如果我先使用滑动手势打开它,之后再点击按钮它就能正常工作了

有没有什么办法可以解决或解决这个问题?


这个按钮点击是针对你随意选择的某个按钮,还是你想要点击左上角的图标来切换抽屉? - btse
这是针对我拥有的一个随机按钮而言的。同样,奇怪的是,如果你尝试使用该按钮,它就什么也不做,但当你通过滑动手势打开和关闭一次后,它会正常工作。 - user2527666
这非常奇怪。你有没有加入日志语句来确保你的按钮调用的方法在第一次点击时被调用了? - btse
是的,该方法正在被调用... :( - user2527666
8个回答

45

我遇到了同样的问题,后来发现抽屉所表示的FrameLayout的可见性被设置为“gone”,可能在第一次滑动手势时变为“visible”。

因此,请打开您的布局xml文件,找到代表抽屉的FrameLayout,并简单地删除可见性设置。我的开放标签现在如下所示:

<FrameLayout
    android:layout_width="305dp"
    android:layout_height="match_parent"
    android:layout_gravity="start">

这对我很有效。

谢谢


可见性设置为“gone” + 抽屉打开Drawer( - M at

6
在我的情况下,布局中 'NavigationView' 的可见性设置为 gone。将其更改为 visible 可以解决问题。

这是唯一对我有效的解决方案。在您的Java/Kotlin代码中,调用setVisibility()以在导航视图上设置View.VISIBLE(在我的情况下为Frament,因此父级是FrameLayout)。 - Borislav Kamenov

3

如果您想从左上角切换打开它,您应该实现onOptionsItemSelected(MenuItem item)方法。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
     // The action bar home/up action should open or close the drawer.
     // ActionBarDrawerToggle will take care of this.
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch (item.getItemId()) {
    case android.R.id.home:
        return true;
    }
   return super.onOptionsItemSelected(item);
}

值得注意的是,如果其中一个片段具有ActionBar菜单,“mDrawerToggle.onOptionsItemSelected”将返回false。 - Thomas Decaux

0

遇到了同样的问题,并且通过在布局中指定抽屉内容元素的宽度来解决了该问题。

如果没有layout_width属性,则在第一次openDrawer()调用时,抽屉不会打开, 有了这个值则可以打开。

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout>

<FrameLayout
    android:layout_width="300dp" 
    android:layout_height="match_parent"
    android:layout_gravity="right"
    android:background="#ffffff"
    android:id="@+id/drawer_content">
</FrameLayout>


0
请在DrawerLayout对象中使用clearFocus()方法。

0

选择你的 NavigationView > 将可见性属性设置为 visible

enter image description here


0

您可以将此代码放入您的DrawerLayout中:

<android.support.design.widget.NavigationView
 android:id="@+id/nav_view"
 android:layout_width="wrap_content"
 android:layout_height="match_parent"
 android:layout_gravity="start"
 app:headerLayout="@layout/nav_header_main"
 app:menu="@menu/activity_main_drawer" />

0

太蠢了,我设置了一个空布局, 问题就像上面描述的那样,当手动拖动抽屉第一次后,按钮才能工作,但是如果没有先拖动它,导航抽屉就永远不会打开。

不要设置空布局

从表示NavigationDrawerContent的ListView中删除我的EmptyLayout使其再次完美运行。

不要这样做

drawerContentListView.setEmptyView(getLayoutInflater().inflate(R.layout.navigation_drawer_empty_layout, null));

**** 让我花费了一个多小时的时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接