2014-02-08 4 views
1

내 안드로이드 응용 프로그램에는 화면 하단에 탭이 있습니다. 탭 중 하나에 슬라이딩 메뉴가 있어야합니다. DrawerLayout을 사용하여 슬라이딩 메뉴를 구현했습니다. 하지만이 탭에 액세스 할 때마다 오류가 발생합니다. 레이아웃 :맞춤형 DrawerLayout

<?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> 

로그 캣 : 오류가이 명령을 의미

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 

:

java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY. 
: 내가 이전 내용의 오류에 직면했기 때문에 나는 CustomDrawerLayout했다

mDrawerLayout = (CustomDrawerLayout) findViewById(R.id.drawer_layout);

하지만 지금은 LogCat abo의 오류에 직면하고 있습니다. ve.

답변

1

I made a CustomDrawerLayout

레이아웃 파일을 검사 할 경우 CustomDrawerLayout이 없습니다. 귀하는 일반 DrawerLayout입니다. 대부분 DrawerLayout 대신 CustomDrawerLayout 클래스를 참조하도록 레이아웃 파일을 수정해야합니다.

+0

어떻게 그 방법을 알려주시겠습니까? – nick28

+0

@ nick28 : 레이아웃 파일의'android.support.v4.widget.DrawerLayout'을'CustomDrawerLayout'의 정규화 된 클래스 이름으로 대체하십시오. – CommonsWare

+0

android.support.v4.widget.DrawerLayout을 com.example.androidtablayout.SongsActivity.CustomDrawerLayout으로 바꾸었지만 오류가 발생했습니다. 렌더링 중에 예외가 발생했습니다 : loader (com/android/ide/eclipse/adt/internal/resources 인스턴스)/manager/ProjectClassLoader) : name : "com/example/androidtablayout/SongsActivity $ CustomDrawerLayout"에 대한 중복 클래스 정의를 시도했습니다. – nick28

0

를 참조 사용자 정의 레이아웃 이름 android.support.v4.widget.DrawerLayout을 대체하고 아닌 내부 클래스 확신 할 수 있습니다. 나는 당신과 똑같은 문제가 있었지만 해결했습니다.

희망이 있습니다.