9

Not sure why I am getting a ClassCastException in the code below. Changing ListActivity to Activity corrects the error but I want ListActivity as this is a part of the bigger code I am trying to build. Any help will be appreciated. Thanks

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
0

6 Answers 6

15

your problem is with the root of your layout

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

you give it the android:id="@android:id/list" the id the android reserves for the ListView widget. Change it in something else. E.g

 <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" >
Sign up to request clarification or add additional context in comments.

Comments

5

In a ListActivity android looks for the widget with android:id="@android:id/list" and expects a ListView but in your case it finds the root LinearLayout and tries to cast it to a ListView hence the exception :

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

To solve it, you just need to provide a different id as mentioned by Blackbelt.

Comments

3

Your linear layout id should be as follows

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

Comments

1

The solution of this error is LinearLayout expects ID attribute.

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

Comments

0

Find all usages of problematic id.
In IDEA IDE You can press Ctrl and click on your id for getting all usages.

Note: It must be only one item with this id.

Comments

0

This problem can occur when we have a container in so many case a LinearLayout without id declared, you must put an android:id="@+id/layout_container" in your LinearLayout at the second level

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.