创建导航抽屉时出现致命错误 - RelativeLayout$LayoutParams 无法转换为 android.support.v4.widget.DrawerLayout$LayoutParams

Fatal Error When Creating Navigation Drawer - RelativeLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams

我试图在我的应用程序中创建导航抽屉,但是当我尝试这样做时出现以下错误:

java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams

错误似乎引用了以下行 (721):

boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);

我已经确认,指的是:

private android.support.v4.widget.DrawerLayout mDrawerLayout;
mDrawerLayout = (android.support.v4.widget.DrawerLayout) findViewById(R.id.drawerLayout);

和:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

所以我不确定为什么会收到有关 RelativeLayout 的错误。

非常感谢任何意见。

完整 XML:

http://pastebin.com/a08mwhsT

完整来源:

http://pastebin.com/82spas1W

LogCat:

07-06 15:18:19.418: E/AndroidRuntime(4514): FATAL EXCEPTION: main
07-06 15:18:19.418: E/AndroidRuntime(4514): Process: com.example.app, PID: 4514
07-06 15:18:19.418: E/AndroidRuntime(4514): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams
07-06 15:18:19.418: E/AndroidRuntime(4514):     at android.support.v4.widget.DrawerLayout.isDrawerView(DrawerLayout.java:1129)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at android.support.v4.widget.DrawerLayout.isDrawerOpen(DrawerLayout.java:1379)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at com.example.app.Home.onPrepareOptionsMenu(Home.java:721)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at android.app.Activity.onPreparePanel(Activity.java:2556)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:464)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:800)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at com.android.internal.policy.impl.PhoneWindow.run(PhoneWindow.java:221)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at android.view.Choreographer.doFrame(Choreographer.java:543)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at android.os.Handler.handleCallback(Handler.java:733)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at android.os.Handler.dispatchMessage(Handler.java:95)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at android.os.Looper.loop(Looper.java:136)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at android.app.ActivityThread.main(ActivityThread.java:5001)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at java.lang.reflect.Method.invokeNative(Native Method)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at java.lang.reflect.Method.invoke(Method.java:515)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
07-06 15:18:19.418: E/AndroidRuntime(4514):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)

换行到

boolean drawerOpen = mDrawerLayout.isDrawerOpen(Gravity.START);

并添加到 XML

中的 ListView
android:layout_gravity="start"

最终将其从 RelativeLayout 中删除 - 它导致了问题:

android:layout_gravity="start"

documentation之后,必须在列表中设置。