#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);