0

I am just watching some Android tutorial videos to get into it. Currently I am dealing with ListViews and I want to create my own ListView layout. Based on the tutorial my code (part of MainActivity) looks like that:

//        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();
            }
        });
    }

When using the first out commented line (simple_list_item_1) it works, but with my own layout (2nd line) unfortunately not.

This is my 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>

Finally, the funnies thing, the stacktrace... By the way, another newbie question: How can I derive from theh stacktrace which row in which class is the evil one?

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
oetzi
  • 97
  • 1
  • 6
  • `java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView` - Basically, `ArrayAdapter` accepts only one kind of view - a single TextView named `@android:id/text1` – Shark Apr 14 '16 at 14:42
  • take a look at the ArrayAdapter.getView source ...also check the documentation textViewResourceId parameter of the constructor – Selvin Apr 14 '16 at 14:44

2 Answers2

1

The reason is that it can only put your data in one view item. So in your layout you need to specify one item (one TextView in your case). Change your xml file to look like this:

<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"/>
Pooya
  • 6,083
  • 3
  • 23
  • 43
1

change your adapter -

    ArrayAdapter listAdapter = new ArrayAdapter<String>(this, R.layout.row_layout,R.id.textView1, countryArray);
    ListView listView = (ListView) findViewById(R.id.listview);
    listView.setAdapter(listAdapter);
Nirel
  • 1,855
  • 1
  • 15
  • 26
  • Thanks Nirel, now I understand the actual problem. I have to refer to one specific TextView. Therefore, the other proposed solution (by Pooya) works too. – oetzi Apr 14 '16 at 16:00