탐색 창으로 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
drawerList는 어디에 정의되어 있습니까? –
올바른 ID를 언급하고 있는지 100 % 확신 할 수 있으면 깨끗하고 다시 작성하십시오. – 323go
여러 레이아웃 폴더를 사용하지 않아도됩니까? 그렇게하면 해당 ID가 앱이 선택하는 폴더의 상대 레이아웃으로 사용되도록 할 수 있습니다. 나는 그것이 다른 레이아웃 파일에 있는지보기 위해 drawerList에 대해 빠른 Ctrl + Shift + f를 할 것입니다. – Lukos