Android ArrayAdapter.Add方法不起作用

Mik*_*ike 18 arrays android add adapter android-2.2-froyo

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");
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是列表项的布局(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>
Run Code Online (Sandbox Code Playgroud)

它给了我和LogCat中的错误

引发者:java.util.AbstractList.add(AbstractList.java:411)中的java.lang.UnsupportedOperationException,位于android.widget.ArrayAdapter.add(ArrayAdapter.java)java.util.AbstractList.add(AbstractList.java:432) :178)

eri*_*ion 41

我只是在学习,但如果我正确地读取源代码,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");
Run Code Online (Sandbox Code Playgroud)

  • 如果这是正确的,ArrayAdapter文档可能会更清晰.根据使用的构造函数,没有提到添加元素的能力. (3认同)