Java.lang.ClassCastException: android.widget.LinearLayout не может быть добавлен в android.widget.ListView

Не знаю, почему я получаю ClassCastException в коде ниже. Изменение ListActivity для Activity исправляет ошибку, но я хочу ListActivity, поскольку это часть большего кода, который я пытаюсь создать. Любая помощь будет оценена по достоинству. благодаря

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> 

Трассировки стека

 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 

Ваша проблема связана с корнем вашего макета

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

Вы даете ему android:id="@android:id/list" идентификатор android для виджета ListView . Измени его в чем-то другом. Например

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

В ListActivity android ищет виджет с android:id="@android:id/list" и ожидает ListView, но в вашем случае он находит корневой LinearLayout и пытается передать его в ListView, следовательно, исключение:

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

Чтобы решить эту проблему, вам просто нужно указать другой идентификатор, как упоминалось в Blackbelt.

Ваш идентификатор линейного макета должен быть следующим.

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

Решение этой ошибки LinearLayout ожидает идентификатор ID.

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

Найти все виды проблемных идентификаторов.
В IDEA IDE Вы можете нажать Ctrl и нажать на свой идентификатор для получения всех способов использования.

Примечание. Это должен быть только один элемент с этим идентификатором.

Эта проблема может возникнуть, когда у нас есть контейнер во многих случаях, когда LinearLayout без объявленного id, вы должны поместить андроид: id = "@ + id / layout_container" в LinearLayout на втором уровне