Подтвердить что ты не робот

Недействительный метод 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)

4b9b3361

Ответ 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");