创建自己的列表视图布局 - "LinearLayout cannot be cast to android.widget.TextView"



我只是在看一些Android教程视频。目前我正在处理ListView,我想创建自己的ListView布局。根据教程,我的代码(MainActivity的一部分)如下所示:

//        ListAdapter listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, favoriteTVShows);
        ListAdapter listAdapter = new ArrayAdapter<String>(this, R.layout.row_layout, favoriteTVShows);
        ListView listView = (ListView) findViewById(R.id.lv_mainListView);
        listView.setAdapter(listAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String tvShowPicked = "You picked: " + String.valueOf(parent.getItemAtPosition(position));
                Toast.makeText(MainActivity.this, tvShowPicked, Toast.LENGTH_SHORT).show();
            }
        });
    }

当使用第一个带注释的行(simple_list_item_1)时,它可以工作,但不幸的是,使用我自己的布局(第二行)时不行。

这是我的row_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="de.oetzi.introductionlistviews.MainActivity"
    android:id="@+id/linearLayout1">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView1"
        android:textSize="30sp"
        android:textStyle="bold"
        android:padding="15dp"/>
</LinearLayout>

最后,有趣的是,堆叠比赛。。。顺便说一句,另一个新手问题是:我如何从堆栈中得出哪个类中的哪一行是邪恶的?

04-14 17:17:47.269 406-406/de.oetzi.introductionlistviews E/ArrayAdapter: You must supply a resource ID for a TextView 04-14 17:17:47.272 406-406/de.oetzi.introductionlistviews D/AndroidRuntime: Shutting down VM 04-14 17:17:47.275 406-406/de.oetzi.introductionlistviews E/AndroidRuntime: FATAL EXCEPTION: main
                                                                            Process: de.oetzi.introductionlistviews, PID: 406
                                                                            java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
                                                                                at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
                                                                                at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
                                                                                at android.widget.AbsListView.obtainView(AbsListView.java:2349)
                                                                                at android.widget.ListView.makeAndAddView(ListView.java:1864)
                                                                                at android.widget.ListView.fillDown(ListView.java:698)
                                                                                at android.widget.ListView.fillFromTop(ListView.java:759)
                                                                                at android.widget.ListView.layoutChildren(ListView.java:1673)
                                                                                at android.widget.AbsListView.onLayout(AbsListView.java:2153)
                                                                                at android.view.View.layout(View.java:15678)
                                                                                at android.view.ViewGroup.layout(ViewGroup.java:5039)
                                                                                at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
                                                                                at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
                                                                                at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
                                                                                at android.view.View.layout(View.java:15678)
                                                                                at android.view.ViewGroup.layout(ViewGroup.java:5039)
                                                                                at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:122)
                                                                                at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
                                                                                at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1170)
                                                                                at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:814)
                                                                                at android.view.View.layout(View.java:15678)
                                                                                at android.view.ViewGroup.layout(ViewGroup.java:5039)
                                                                                at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
                                                                                at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
                                                                                at android.view.View.layout(View.java:15678)
                                                                                at android.view.ViewGroup.layout(ViewGroup.java:5039)
                                                                                at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
                                                                                at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
                                                                                at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
                                                                                at android.view.View.layout(View.java:15678)
                                                                                at android.view.ViewGroup.layout(ViewGroup.java:5039)
                                                                                at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
                                                                                at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
                                                                                at android.view.View.layout(View.java:15678)
                                                                                at android.view.ViewGroup.layout(ViewGroup.java:5039)
                                                                                at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
                                                                                at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
                                                                                at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
                                                                                at android.view.View.layout(View.java:15678)
                                                                                at android.view.ViewGroup.layout(ViewGroup.java:5039)
                                                                                at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
                                                                                at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
                                                                                at android.view.View.layout(View.java:15678)
                                                                                at android.view.ViewGroup.layout(ViewGroup.java:5039)
                                                                                at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2086)
                                                                                at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1843)
                                                                                at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
                                                                                at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5891)
                                                                                at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
                                                                                at android.view.Choreographer.doCallbacks(Choreographer.java:580)
                                                                                at android.view.Choreographer.doFrame(Choreographer.java:550)
                                                                                at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
                                                                                at android.os.Handler.handleCallback(Handler.java:739)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                at android.os.Looper.loop(Looper.java:135)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5293)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
                                                                             Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView
                                                                                at android.widge

原因是它只能将数据放在一个视图项中。因此,在布局中,您需要指定一个项目(在您的情况下为一个TextView)。将您的xml文件更改为如下所示:

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textView1"
    android:textSize="30sp"
    android:textStyle="bold"
    android:padding="15dp"/>

更改适配器-

    ArrayAdapter listAdapter = new ArrayAdapter<String>(this, R.layout.row_layout,R.id.textView1, countryArray);
    ListView listView = (ListView) findViewById(R.id.listview);
    listView.setAdapter(listAdapter);

相关内容

最新更新