Отображение ошибки в ArrayAdapter ListView

#android

#Android

Вопрос:

Я написал этот код, но он показывает мне ошибку, и я не могу определить, в чем проблема.Мой код выглядит следующим образом-

 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 для 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 для 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>
 

Он показывает мне ошибку: E/ArrayAdapter(30552): You must supply a resource ID for a TextView
Я не добавляю никакого текстового представления, тогда почему возникает эта ошибка?

Экспертам JavaExperts нужно ваше ценное предложение для решения этой проблемы.

Комментарии:

1. Адаптеру требуется Textview. Опубликуйте свой da_items.xml файл

2. Я опубликовал da_items.xml.file

Ответ №1:

Проверьте официальные документы ArrayAdapter.

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

Добавлено в API уровня 1

Конструктор

Параметры

контекст — текущий контекст.

ресурс — идентификатор ресурса для файла макета, содержащего TextView, для использования при создании экземпляров представлений.

объекты — объекты для представления в ListView.


Вы заметите, что адаптер массива ожидает, что второй параметр является идентификатором ресурса текстового представления, а не макета.

Итак, когда вы используете этот конструктор:

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

R.Layout.da_items должен быть XML-макет, где первым элементом должен быть a TextView , что-то вроде этого:

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

Чтобы быть более настраиваемым textview, вы также можете использовать —

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

где вы указываете идентификатор макета, который может содержать различные представления, но также должен содержать TextView with и id (третий параметр), которые вы передаете своему ArrayAdapter , чтобы он мог знать, куда помещать строки.

Ответ №2:

Макет, который вы предоставляете в адаптере R.layout.da_items , должен содержать только TextView, потому что это то, что Android поддерживает по умолчанию. Так что либо используйте android.R.layout.simple_list_item_1 (этот макет предоставляется Android) вместо вашего пользовательского макета, либо убедитесь, что ваш R.layout.da_items выглядит примерно так :

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

Ответ №3:

Попробуйте это.

Добавьте это в 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>
 

И в MainActivity.java

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

Ответ №4:

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

это поможет вам.

Комментарии:

1. Но можете ли вы сказать мне, почему мне нужно написать simple_list_item_1 вместо da_items и откуда у меня этот simple_list_item_1

2. По умолчанию из ресурса Android вы можете получить simple_list_item_1

Ответ №5:

Как вы использовали ниже, код создает проблему

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

Таким образом, нет необходимости создавать другой макет и использовать его как R.layout.da_items
вместо этого используйте

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