Недействительный метод Android ArrayAdapter.Add
Метод ArrayAdapter.add() для меня не работает. Я использую Eclipse Helios 3.6 с плагином ADT, Target Source - это эмулятор Froyo 2.2 и 2.2 HTC Evo 4g. Вот мой класс java
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String[] entries = {"List Item A", "List Item B"};
ArrayAdapter<String> arrAdapt=new ArrayAdapter<String>(this, R.layout.list_item, entries);
arrAdapt.setNotifyOnChange(true);
arrAdapt.add("List Item C");
}
}
И вот мой макет для элемента списка (list_item.xml)
<?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="fill_parent">
android:padding="10dp"
android:textSize="12sp"
</TextView>
Это дает мне и ошибку в LogCat, который говорит
Вызвано: java.lang.UnsupportedOperationException в java.util.AbstractList.add(AbstractList.java:411) в java.util.AbstractList.add(AbstractList.java:432) в android.widget.ArrayAdapter.add(ArrayAdapter.java:178)
Ответы
Ответ 1
Я просто изучаю, но если я правильно читаю source, конструктор ArrayAdapter не копирует ссылки на каждый из элементы в массиве или списке. Вместо этого он непосредственно использует список, который прошел, или для массива использует asList() для обработки исходного массива в виде списка. Поскольку список, возвращаемый asList(), по-прежнему является просто представлением базового массива, вы не можете ничего сделать (например, изменить размер), который вы не могли бы сделать с массивом.
Попробуйте передать список, например ArrayList, вместо массива.
ArrayList<String> entries =
new ArrayList<String>(Arrays.asList("List Item A", "List Item B"));
ArrayAdapter<String> arrAdapt=
new ArrayAdapter<String>(this, R.layout.list_item, entries);
arrAdapt.setNotifyOnChange(true);
arrAdapt.add("List Item C");