我一直在尝试按照android here的建议将代码移至DrawerLayout,因为不推荐使用SlidingDrawer

我的问题是,到目前为止DrawerLayout似乎执行得很差,有无用的错误消息(没有防御性的编程),并且/或者在文档中解释得不够充分。
isDrawerOpen()方法描述为here:



每种传递方法isDrawerOpen(View drawer)openDrawer(View drawer)closeDrawer(View drawer)都不起作用:有问题的DrawerLayout或其子代。我不知道应该为这些方法提供什么以使它们起作用。有人可以让我知道吗?

有关实现的完整问题描述,请参见下文。

我有这样的布局:

<android.support.v4.widget.DrawerLayout
    android:id="@+id/mainmenuPanel"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

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

    <FrameLayout
        android:id="@+id/menuPane"
        android:layout_width="300dp"
        android:layout_height="match_parent" />
</android.support.v4.widget.DrawerLayout>

在我的代码中,我将以下方法连接到按钮:
protected void onCreate(Bundle savedInstanceState) {
    ...
    mMenuPanel = (DrawerLayout) findViewById(R.id.mainmenuPanel);
    ....
}

public boolean isDrawerOpen() {
    if(mMenuPanel != null) {
        return mMenuPanel.isDrawerOpen(mMenuPanel);
    }
    return false;
}

但是,如果将其本身作为参数(在极端情况下将是多余的),则会出现以下错误:
E/AndroidRuntime(11241): java.lang.ClassCastException:
android.widget.FrameLayout$LayoutParams cannot be cast to
android.support.v4.widget.DrawerLayout$LayoutParams

(正如您将注意到的那样,它不会向您提供有关您做错了什么的任何信息。它只是问题的征兆)。

其他答案herehere难以理解,或者与问题紧密联系,没有太多解释。即便如此,我还是尝试添加一个人造LinearLayout或一个DrawerLayout的子级,然后分别给这个错误:
E/AndroidRuntime(11424): java.lang.IllegalArgumentException:
View android.widget.FrameLayout{420f5ea8 V.E..... ........
0,0-800,1172 #7f060038 app:id/menuPane} is not a drawer

谁能解释这些方法实际需要传递给他们什么才能起作用?

最佳答案

而且,答案是:

第二个 child (又名“抽屉”)是需要传递给方法的对象。我的问题是,当我意识到自己已经将布局缩减为尽可能简单的实现以进行测试时,我将重力从“抽屉”中移除了。没有引力,您将获得上述完全不相关的错误消息。

我可以确认使用以下设置可以使代码正常工作:

mMenuPanel.isDrawerOpen(findViewById(R.id.drawer));

并具有以下布局:
<android.support.v4.widget.DrawerLayout
    android:id="@+id/mainmenuPanel"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

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

    <FrameLayout
        android:id="@+id/drawer"
        android:layout_width="300dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"/> <!-- This line was the problem!!!!!!!-->
</android.support.v4.widget.DrawerLayout>

关于android - 您需要将什么传递给v4.widget.DrawerLayout.isDrawerOpen()/。openDrawer()/。closeDrawer(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20289395/

10-12 03:10