我一直在尝试按照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
(正如您将注意到的那样,它不会向您提供有关您做错了什么的任何信息。它只是问题的征兆)。
其他答案here或here难以理解,或者与问题紧密联系,没有太多解释。即便如此,我还是尝试添加一个人造
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/