user3732316
user3732316

Reputation: 63

Showing error in ArrayAdapter ListView

I have written this code but it shows me error and i cannot identify where the problem is.My code is as follows-

package com.example.adapterexample;



import android.support.v4.app.Fragment;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.os.Build;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listAdapter();
    }

    public void listAdapter() {

        String[] myItems = { "Apple", "Orange", "Grape", "Watermilon" };
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                R.layout.da_items, myItems);
        ListView list = (ListView) findViewById(R.id.listView);
        list.setAdapter(adapter);

    }
    }

xml for da_items

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

</LinearLayout>

xml for activity_main

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    //tools:context="com.example.adapterexample.MainActivity"
    //tools:ignore="MergeRootFrame" >

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</FrameLayout>

It shows me error: E/ArrayAdapter(30552): You must supply a resource ID for a TextView I do not add any text view then why this error is coming?

JavaExperts need your valuable suggestion to solve this issue.

Upvotes: 0

Views: 1986

Answers (5)

sjain
sjain

Reputation: 23344

Check official docs of ArrayAdapter.

public ArrayAdapter (Context context, int resource, T[] objects)

Added in API level 1

Constructor

Parameters

context - The current context.

resource - The resource ID for a layout file containing a TextView to use when instantiating views.

objects - The objects to represent in the ListView.


You will notice that the array adapter is expecting that the second parameter is a resource id of a text view not a layout.

So, when you use this constructor:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                R.layout.da_items, myItems);

R.Layout.da_items must be an xml layout where the first element must be a TextView, something like this:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    //other attributes 
/>

To be more sort of a custom textview, you can also use -

new ArrayAdapter<String>(this, R.layout.da_items, 
   R.id.the_id_of_a_textview_from_the_layout, myItems)

where you supply the id of a layout that can contain various views, but also must contain a TextView with and id(third parameter) that you pass to your ArrayAdapter so it can know where to put the Strings.

Upvotes: 1

Vishal
Vishal

Reputation: 7

As you have used below code is creating problem

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            R.layout.da_items, myItems);

So there is no need to make another layout and use it as R.layout.da_items instead use

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.simple_list_item_1, myItems);

Upvotes: 0

VairavelRajendran
VairavelRajendran

Reputation: 56

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.simple_list_item_1, myItems);

it will help you.

Upvotes: 0

Aman Singh
Aman Singh

Reputation: 360

Try this.

Add this in da_item.xml

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

       <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/icon"
        android:paddingBottom="10dp"
        android:textColor="#CC0033"
        android:textSize="16sp" />


</LinearLayout>

And in MainActivity.java

listView = (ListView) findViewById(R.id.list1);
        CustomListViewAdapter adapter = new CustomListViewAdapter(this,
                R.layout.da_item, myItems);
        listView.setAdapter(adapter);

Upvotes: 0

Shivam Verma
Shivam Verma

Reputation: 8023

The layout that you provide in the adapter - R.layout.da_items - should only contain a TextView because that's what android supports by default. So either use android.R.layout.simple_list_item_1 (this layout is provided by android) in place of your custom layout or make sure that your R.layout.da_items looks something like :

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center_vertical"
    android:paddingLeft="6dip"
    android:minHeight="?android:attr/listPreferredItemHeight"
/>

Upvotes: 0

Related Questions