web-dev-qa-db-ja.com

Android ArrayAdapter.Addメソッドが機能しない

ArrayAdapter.add()メソッドが機能していません。 ADTプラグインでEclipseHelios 3.6を使用していますが、TargetSourceはFroyo2.2エミュレーターと2.2HTC Evo4gです。これが私の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にエラーが表示されます。

原因:Android.widget.ArrayAdapter.add(ArrayAdapter.Java)のJava.util.AbstractList.add(AbstractList.Java:432)のJava.util.AbstractList.add(AbstractList.Java:411)のJava.lang.UnsupportedOperationException :178)

18
Mike

学習中ですが、 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");
41
erichamion