0

탐색 창으로 Android 애플리케이션을 만들고 있습니다. 또한 사용자가 앱을 처음 열 때 투명한 지시 화면을 표시하려고합니다. 이를 위해 필자는 xml 파일에 상대적 레이아웃이 있고 서랍에 listView가 있습니다.Android에서 클래스 캐스트 예외가 발생했습니다.

XML 파일 : 그러나

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

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.twistedlines.overbudget.MainActivity" 
    tools:ignore="MergeRootFrame" > 

    <!-- transparent overlay --> 
    <RelativeLayout 
     android:id="@+id/top_transparent" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#77CCCCCC" > 

     <ImageView 
      android:id="@+id/transparent_img" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:contentDescription="@string/contdesc" 
      android:scaleType="fitXY" 
      android:src="@drawable/instructions" /> 
    </RelativeLayout> 

</FrameLayout> 

<ListView android:id="@+id/drawerList" 
    android:layout_height="match_parent" 
    android:layout_width="240dp" 
    android:layout_gravity="start" 
    android:divider="#c7c7c7" 
    android:dividerHeight="3dp" 
    android:background="#bdbdbd"></ListView> 

</android.support.v4.widget.DrawerLayout> 

, 내가이 줄 내 자바 파일에 ClassCastException를 받고 있어요 :

drawerList = (ListView) findViewById(R.id.drawerList); 

로그 캣 :

11-11 00 : 10 : 53.417 : E/테스트 (8163) : 예외 11-11 00 : 10 : 53.437 : E/AndroidRuntime (8163) : 치명적인 예외 : 메인 11-11 00 : 10 : 53.437 : E/AndroidRuntime (8163) : java.lang.RuntimeException가 : java.lang.ClassCastException가 : 활동 ComponentInfo {com.twistedlines.overbudget/com.twistedlines.overbudget.MainActivity}을 (를) 시작할 수 없습니다 android.widget.RelativeLayout 수 없어 1135 00 : 10 : 53.437 : E/AndroidRuntime (8163) : android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2062) 에 캐스팅되었습니다. 11-11 00:10 : 53.437 : E/AndroidRuntime (8163) : android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2087) 11-11 00 : 10 : 53.437 : E/AndroidRuntime (8163) : android.app.ActivityThread. $ 600에 접속 (ActivityThread.java:133) 11-11 00:10:53. 437 : E/AndroidRuntime (8163) : android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1198) 11-11 00 : 10 : 53.437 : E/AndroidRuntime (8163) : 에서 android.os. Handler.dispatchMessage (Handler.java:99) 11-11 00 : 10 : 53.437 : E/AndroidRuntime (8163) : android.os.Looper.loop (Looper.java:137) 11-11 00:10 : 53.437 : E/AndroidRuntime (8163) : android.app.ActivityThread.main (ActivityThread.java:4792) 11-11 00 : 10 : 53.437 : E/AndroidRuntime (8163) : java.lang.reflect .Method.invokeNative (네이티브 메소드) 11-11 00 : 10 : 53.437 : E/AndroidRuntime (8163) : 에서 java.lang.reflect.Method.invoke (Method.java:511) 11-11 00:10 : 53.437 : E/An droidRuntime (8163) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:808) 11-11 00 : 10 : 53.437 : E/AndroidRuntime (8163) : com.android. internal.os.ZygoteInit.main (ZygoteInit.java:575) 11-11 00 : 10 : 53.437 : E/AndroidRuntime (8163) : 에 dalvik.system.NativeStart.main (네이티브 메소드) 11-11 00:10 : 53.437 : E/AndroidRuntime (8163) : 원인 : java.lang.ClassCastException : android.widget.RelativeLayout을 android.widget.ListView 11-11 00 : 10 : 53.437 : E/AndroidRuntime (8163)으로 캐스팅 할 수 없습니다.) : at com.twistedlines.overbudget.MainActivity.onCreate (MainActivity.java:118) 11-11 00 : 10 : 53.437 : E/AndroidRuntime (8163) : android.app.Activity.performCreate (Activity.java:5008) 11-11 00 : 10 : 53.437 : E/AndroidRuntime (8163) : android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1079) 11 -11 00 : 10 : 53.437 : E/AndroidRuntime (8163) : android.app.ActivityThread.performLaunchActivity (ActivityThread.java : 2026)

RelativeLayout은 (는) 캐스트되지 않습니다. ListView. 그러나 XML에서 drawerList는 RelativeLayout이 아닌 ListView입니다. 문제가 무엇입니까?

내 drawerList 변수는 ListView 객체입니다. 선언은 다음과 같습니다.

DrawerLayout drawerLayout; 
    ListView drawerList; 
    ActionBarDrawerToggle abdToggle; 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     topLevelLayout = findViewById(R.id.top_transparent); 



      if (isFirstTime()) { 
       topLevelLayout.setVisibility(View.INVISIBLE); 
      } 
     drawerLayout = (DrawerLayout)findViewById(R.id.drawerLayout); 
     drawerList = (ListView) findViewById(R.id.drawerList); //exception line 
     adaptr=new mAdapter(this); 
     drawerList.setAdapter(adaptr); 
     drawerList.setOnItemClickListener(new itemListener()); 
     drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, 
       GravityCompat.START); 
     getSupportActionBar().setTitle("Overview"); 

     //rest of the code 
+0

drawerList는 어디에 정의되어 있습니까? –

+1

올바른 ID를 언급하고 있는지 100 % 확신 할 수 있으면 깨끗하고 다시 작성하십시오. – 323go

+0

여러 레이아웃 폴더를 사용하지 않아도됩니까? 그렇게하면 해당 ID가 앱이 선택하는 폴더의 상대 레이아웃으로 사용되도록 할 수 있습니다. 나는 그것이 다른 레이아웃 파일에 있는지보기 위해 drawerList에 대해 빠른 Ctrl + Shift + f를 할 것입니다. – Lukos

답변

0

코드는 괜찮습니다. 그냥 다시 청소하고 다시 만들려고 노력하십시오.

청소의 경우. 프로젝트 -> Clean으로 이동하십시오. 프로젝트를 선택하고 ok을 클릭하십시오.

다시 작성하려면 코드를 실행하십시오.

관련 문제