nick28
nick28

Reputation: 67

Custom DrawerLayout

My android application features tabs on the bottom of the screen. One of the tabs should have a sliding menu. I implemented the sliding menu using DrawerLayout. But I'm getting an error everytime I access this tab. Layout:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</android.support.v4.view.ViewPager>
<FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

  <!-- Screen Design for the SONGS -->
<ListView
        android:id="@+id/list_slidermenu"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="end"
        android:choiceMode="singleChoice"
        android:divider="@color/list_divider"
        android:dividerHeight="1dp"        
        android:listSelector="@drawable/list_selector"
        android:background="@color/list_background"/>
</android.support.v4.widget.DrawerLayout>

LogCat:

02-08 21:54:18.099: E/AndroidRuntime(12877): FATAL EXCEPTION: main
02-08 21:54:18.099: E/AndroidRuntime(12877): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidtablayout/com.example.androidtablayout.SongsActivity}: java.lang.ClassCastException: android.support.v4.widget.DrawerLayout cannot be cast to com.example.androidtablayout.SongsActivity$CustomDrawerLayout
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.app.ActivityThread.startActivityNow(ActivityThread.java:1941)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:705)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.widget.TabHost.setCurrentTab(TabHost.java:369)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:150)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:560)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.view.View.performClick(View.java:4223)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.view.View$PerformClick.run(View.java:17275)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.os.Handler.handleCallback(Handler.java:615)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.os.Looper.loop(Looper.java:137)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.app.ActivityThread.main(ActivityThread.java:4898)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at java.lang.reflect.Method.invokeNative(Native Method)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at java.lang.reflect.Method.invoke(Method.java:511)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:128)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at dalvik.system.NativeStart.main(Native Method)
02-08 21:54:18.099: E/AndroidRuntime(12877): Caused by: java.lang.ClassCastException: android.support.v4.widget.DrawerLayout cannot be cast to com.example.androidtablayout.SongsActivity$CustomDrawerLayout
02-08 21:54:18.099: E/AndroidRuntime(12877):    at com.example.androidtablayout.SongsActivity.onCreate(SongsActivity.java:57)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.app.Activity.performCreate(Activity.java:5191)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
02-08 21:54:18.099: E/AndroidRuntime(12877):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
02-08 21:54:18.099: E/AndroidRuntime(12877):    ... 19 more

The error refers to this command: mDrawerLayout = (CustomDrawerLayout) findViewById(R.id.drawer_layout);

I made a CustomDrawerLayout because I was previously facing an error stating:

java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY.

But now I'm facing the error in the LogCat above.

Upvotes: 2

Views: 1953

Answers (2)

Iree
Iree

Reputation: 358

Examining the answer by CommonsWare, replace android.support.v4.widget.DrawerLayout with your custom layout name and make sure it's not an inner class. I had the same issues as you did, but that solved it.

Hope it helps!

Upvotes: 0

CommonsWare
CommonsWare

Reputation: 1006539

I made a CustomDrawerLayout

If you examine your layout file, you do not have a CustomDrawerLayout. You have a regular DrawerLayout. Most likely, you need to modify your layout file to reference your CustomDrawerLayout class instead of DrawerLayout.

Upvotes: 1

Related Questions