java.lang.ClassCastException:android.widget.LinearLayout不能转换使用ArrayAdapter android.widget.TextView到 [英] java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView using ArrayAdapter

查看:372
本文介绍了java.lang.ClassCastException:android.widget.LinearLayout不能转换使用ArrayAdapter android.widget.TextView到的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在上Android设备上开发了我的长期项目。
问题是我尝试对象添加到我的ArrayAdapter。
但它得到一个错误。

I'm working on my term project which developed on Android device. The problem is I try to add an object into my ArrayAdapter. But it gets an errors.

11-29 11:58:07.136: D/dalvikvm(1262): GC_FOR_ALLOC freed 136K, 8% free 2677K/2880K, paused 30ms, total 32ms

11-29 11:58:07.415: E/ArrayAdapter(1262): You must supply a resource ID for a TextView

11-29 11:58:07.415: D/AndroidRuntime(1262): Shutting down VM

11-29 11:58:07.415: W/dalvikvm(1262): threadid=1: thread exiting with uncaught exception (group=0x41465700)

11-29 11:58:07.465: E/AndroidRuntime(1262): FATAL EXCEPTION: main

11-29 11:58:07.465: E/AndroidRuntime(1262): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.AbsListView.obtainView(AbsListView.java:2177)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.ListView.makeAndAddView(ListView.java:1840)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.ListView.fillDown(ListView.java:675)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.ListView.fillFromTop(ListView.java:736)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.ListView.layoutChildren(ListView.java:1655)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.AbsListView.onLayout(AbsListView.java:2012)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.View.layout(View.java:14289)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.ViewGroup.layout(ViewGroup.java:4562)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.View.layout(View.java:14289)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.ViewGroup.layout(ViewGroup.java:4562)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.View.layout(View.java:14289)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.ViewGroup.layout(ViewGroup.java:4562)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:349)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.View.layout(View.java:14289)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.ViewGroup.layout(ViewGroup.java:4562)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.View.layout(View.java:14289)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.ViewGroup.layout(ViewGroup.java:4562)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.Choreographer.doFrame(Choreographer.java:532)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.os.Handler.handleCallback(Handler.java:730)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.os.Handler.dispatchMessage(Handler.java:92)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.os.Looper.loop(Looper.java:137)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.app.ActivityThread.main(ActivityThread.java:5103)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at java.lang.reflect.Method.invokeNative(Native Method)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at java.lang.reflect.Method.invoke(Method.java:525)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)

11-29 11:58:07.465: E/AndroidRuntime(1262):     at dalvik.system.NativeStart.main(Native Method)

11-29 11:58:07.465: E/AndroidRuntime(1262): Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView

11-29 11:58:07.465: E/AndroidRuntime(1262):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:379)

11-29 11:58:07.465: E/AndroidRuntime(1262):     ... 40 more

这是我的MainActivity - onCreate方法

This is my MainActivity - onCreate method.

private EditText createTaskText;
ArrayAdapter<Task> listAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); // To change body of overridden
                                        // methods use File | Settings |
                                        // File Templates.
    setContentView(R.layout.main);

    // !!! Add quick create task !!!
    createTaskText = (EditText) findViewById(R.id.quickTopic);
    TextView.OnEditorActionListener exListener = new TextView.OnEditorActionListener() {

        @Override
        public boolean onEditorAction(TextView v, int actionId,
                KeyEvent event) {
            if (actionId == EditorInfo.IME_NULL
                    && event.getAction() == KeyEvent.ACTION_DOWN
                    && !createTaskText.getText().toString().equals("")) {
                // setContentView(R.layout.edit_task_page);
                Intent goTaskEdit = new Intent(ExpandAnimationDemo.this,
                        TaskEdit.class);
                goTaskEdit.putExtra("Topic", createTaskText.getText()
                        .toString());
                startActivity(goTaskEdit);
                createTaskText.setText("");
            }
            return false;
        }
    };
    createTaskText.setOnEditorActionListener(exListener);


    // Creating list, initially = 0 list
    ListView list = (ListView) findViewById(R.id.udiniList);

    Task[] items = {
            new Task("Task 1"),
            new Task("Task 2"),
            new Task("Task 3"),
            new Task("Task 4"),
            new Task("Task 5"),
            };
    // Creating the list adapter and populating the list
    listAdapter = new ArrayAdapter<Task>(this,
            R.layout.list_item, items);
    list.setAdapter(listAdapter);


    // Creating an item click listener, to open/close our toolbar for each
    // item
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, final View view,
                int position, long id) {

            View toolbar = view.findViewById(R.id.toolbar);

            // Creating the expand animation for the item
            ExpandAnimation expandAni = new ExpandAnimation(toolbar, 500);

            // Start the animation on the toolbar
            toolbar.startAnimation(expandAni);

        }
    });

    // !!! Set Swipe to Dismiss !!!
    // Create a ListView-specific touch listener. ListViews are given special treatment because
    // by default they handle touches for their list items... i.e. they're in charge of drawing
    // the pressed state (the list selector), handling list item clicks, etc.
    SwipeDismissListViewTouchListener touchListener =
            new SwipeDismissListViewTouchListener(
                    list,
                    new SwipeDismissListViewTouchListener.DismissCallbacks() {
                        @Override
                        public boolean canDismiss(int position) {
                            return true;
                        }

                        @Override
                        public void onDismiss(ListView listView, int[] reverseSortedPositions) {
                            for (int position : reverseSortedPositions) {
                                listAdapter.remove(listAdapter.getItem(position));
                            }
                            listAdapter.notifyDataSetChanged();
                        }
                    });
    list.setOnTouchListener(touchListener);
    // Setting this scroll listener is required to ensure that during ListView scrolling,
    // we don't look for swipes.
    list.setOnScrollListener(touchListener.makeScrollListener());

}

我的Task类

public class Task extends HistoryTask {

int priority;
Calendar duedate;

//------------------------------
// constructors
public Task() {
    duedate = Calendar.getInstance();
}

public Task( String t ) {
    super( t );
    duedate = Calendar.getInstance();
}

public Task( String t, String d ) {
    super( t, d );
    duedate = Calendar.getInstance();
}

public Task( String t, String d, int tg ) {
    super( t, d, tg );
    duedate = Calendar.getInstance();
}

public Task( String t, String d, int tg, int p ) {
    super( t, d, tg );
    priority = p;
    duedate = Calendar.getInstance();
}

public Task( String t, String d, int tg, int p, Calendar dd ) {
    super( t, d, tg );
    priority = p;
    duedate = dd;
}   

@Override
public String toString() {
    return super.toString();
}

}

的main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<EditText
    android:id="@+id/quickTopic"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:layout_marginTop="10dp"
    android:hint="@string/quickTaskTopic"
    android:inputType="text" />

<ListView
    android:id="@+id/udiniList"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:divider="@android:color/transparent"
    android:dividerHeight="10.0sp" />

</LinearLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:padding="20dip" />

    <ImageView
        android:id="@+id/editPic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        android:layout_marginTop="20dp"
        android:layout_toLeftOf="@+id/deletePic"
        android:contentDescription="@string/EditDesc"
        android:src="@drawable/pencil" />

    <ImageView
        android:id="@+id/deletePic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="20dp"
        android:layout_marginTop="20dp"
        android:contentDescription="@string/DeleteDesc"
        android:src="@drawable/delete" />
</RelativeLayout>

<!-- *********************** -->
<!-- *** TOOLBAR LAYOUT **** -->
<!-- *********************** -->

<LinearLayout
    android:id="@+id/toolbar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="-20dip"
    android:orientation="vertical"
    android:visibility="gone" >

    <!-- TextView will showing task details.The details must get from user database -->

    <TextView
        android:id="@+id/taskDetail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:padding="20dp"
        android:paddingLeft="50dp"
        android:singleLine="false"
        android:text="@string/Details" />

    <!-- This RelativeLayout manage the TextView which represent the information of Priority, DueDate, and Tag s-->

    <RelativeLayout
        android:id="@+id/taskSpec"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:focusableInTouchMode="false" >

        <!-- TextView of "Priority" and priority value -->

        <TextView
            android:id="@+id/PriorityStr"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:padding="20dp"
            android:paddingLeft="50dp"
            android:text="@string/Priority" />

        <TextView
            android:id="@+id/PriorityGet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/PriorityStr"
            android:padding="20dp"
            android:paddingLeft="55dp"
            android:text="@string/SamplePriority" />

        <!-- TextView of "DueDate" and duedate value -->

        <TextView
            android:id="@+id/DueDateStr"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_below="@+id/PriorityStr"
            android:padding="20dp"
            android:paddingLeft="50dp"
            android:text="@string/DueDate" />

        <TextView
            android:id="@+id/DueDateGet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/PriorityGet"
            android:layout_toRightOf="@+id/DueDateStr"
            android:padding="20dp"
            android:paddingLeft="50dp"
            android:text="@string/SampleDueDate" />

        <!-- TextView of "Tags" and tags value -->

        <TextView
            android:id="@+id/TagsStr"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_below="@+id/DueDateStr"
            android:padding="20dp"
            android:paddingLeft="50dp"
            android:text="@string/Tags" />

        <TextView
            android:id="@+id/TagGet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/DueDateGet"
            android:layout_toRightOf="@+id/TagsStr"
            android:padding="20dp"
            android:paddingLeft="60dp"
            android:text="@string/SampleTags" />
    </RelativeLayout>
</LinearLayout>

</LinearLayout>

我该如何解决这个问题呢?

How can I solve this problem?

推荐答案

从错误它说, ArrayAdapter需要的资源ID是一个TextView

尝试更改

listAdapter = new ArrayAdapter<Task>(this, R.layout.list_item, items);

这样:

listAdapter = new ArrayAdapter<Task>(this, R.layout.list_item, R.id.TEXT_VIEW_ID, items);

替换 R.id.TEXT_VIEW_ID 与布局TextView的ID

Replace R.id.TEXT_VIEW_ID with the TextView id in your layout

这篇关于java.lang.ClassCastException:android.widget.LinearLayout不能转换使用ArrayAdapter android.widget.TextView到的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆