2015-01-21 21 views
9

Aşağıdaki kodda neden ClassCastException alıyorum emin değilim. Aktivite için ListActivity değiştirme, hatayı düzeltir, ancak oluşturmaya çalıştığım daha büyük kodun bir parçası olduğu için ListActivity istiyorum. Herhangi bir yardım takdir edilecektir. Teşekkürjava.lang.ClassCastException: android.widget.LinearLayout android.widget.ListView için yayınlanamaz

MainActivity.java

package com.example.debug; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 


public class MainActivity extends ListActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

    <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 
    <!-- Name Label --> 
    <TextView 
    android:id="@+id/vehicleType" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textColor="#43bd00" 
    android:textSize="16sp" 
    android:textStyle="bold" 
    android:paddingTop="6dip" 
    android:text="Mobile1" 
    android:paddingBottom="2dip" /> 
    <!-- Description Label --> 
    <TextView 
    android:id="@+id/vehicleColor" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textColor="#acacac" 
    android:text="Mobile2" 
    android:paddingBottom="2dip" /> 


    <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 
    <!-- Cost Label --> 
    <TextView 
    android:id="@+id/fuel" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#000000" 
    android:gravity="left" 
    android:textStyle="bold" 
    android:text="Mobile3" /> 
    <!-- Price Label --> 
    <TextView 
    android:id="@+id/treadType" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#acacac" 
    android:text="Mobile4" 
    android:paddingBottom="2dip" /> 
    </LinearLayout> 
    </LinearLayout> 
    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 
</LinearLayout> 

StackTrace

FATAL EXCEPTION: main 
Process: com.example.debug, PID: 1370 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.debug/com.example.debug.MainActivity}: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.ListView 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
    at android.app.ActivityThread.access$800(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5017) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.ListView 
    at android.app.ListActivity.onContentChanged(ListActivity.java:241) 
    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:293) 
    at android.app.Activity.setContentView(Activity.java:1929) 
    at com.example.debug.MainActivity.onCreate(MainActivity.java:14) 
    at android.app.Activity.performCreate(Activity.java:5231) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
    ... 11 more 

cevap

13

senin prob lem sen Kimlik ListView widget için android rezervleri android:id="@android:id/list" vermek Düzeninize

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

köküne beraberdir. Başka bir şeyde değiştir. Bir ListActivity android in Örneğin

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/my_linear_layout" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 
5

android:id="@android:id/list" ile widget için arar ve bir ListView beklediğini ancak sizin durumunuzda o kök LinearLayout bulur ve bir ListView dolayısıyla istisna dökmeyi çalışır:

Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.ListView 

Bunu çözmek için, sadece Blackbelt tarafından belirtildiği gibi farklı bir kimlik sağlamanız gerekir. sorunlu id tüm kullanımlarını bul

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/my_linear_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 
3

Kişisel lineer düzeni kimliği olmalıdır.
IDEA IDE'de Ctrl'ye basabilir ve tüm kullanımları almak için kimliğinizi tıklayabilirsiniz.

Not: Bu kimliğe sahip tek bir öğe olmalıdır.

0

şöyle

0

bu kadar çok durumda kimliği beyan olmadan LinearLayout bir kap var bu sorun oluşabilir, bir android koymak gerekir: id = "@ + id/layout_container" ikinci düzeyde LinearLayout içinde

1

Bu hatanın çözümü LinearLayout ID özniteliğini bekler.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layout_container2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <include 
     android:id="@+id/toolbar_noaction" 
     layout="@layout/toolbar"/> 

</LinearLayout> 
İlgili konular