0

OnCreateメソッドに次のスピナーがあります。

    spinnerArrayAdapter = new ArrayAdapter<String>(this,   android.R.layout.simple_spinner_item, accounts);
        spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
        spinner.setAdapter(spinnerArrayAdapter); 
        spinner.setOnItemSelectedListener(this);

そして、次のような他の方法でスピナーにいくつかのエントリを追加したいと思います。

spinnerArrayAdapter.add(value.toString());
spinner.setAdapter(spinnerArrayAdapter); 

しかし、アプリがクラッシュします。私に何ができる?ありがとう!

4

2 に答える 2

1

2つの可能性があります:

また:

アダプターに新しいレコードを追加しようとしている場所: spinnerArrayAdapter.add("Your new item"); spinnerArrayAdapter.notifyDataSetChanged();

または:

onCreateで、アダプターを初期化するspinnerArrayAdapter.setNotifyOnChange(true); ときに、後でアダプターにレコードを追加するときに追加するだけで、を呼び出しますspinnerArrayAdapter.add("Your new item");。内部notifyDataSetChanged()から呼び出されているため、呼び出す必要はありません。add

どちらの場合も、アダプターをスピナーに再割り当てする必要はありません。

アダプターを配列で初期化する場合、アダプターが内部に格納するのはコンストラクターで指定した配列である(List<T>) Arrays.asList(objects)ため、addメソッドは例外を発生させます。配列に対するリストインターフェイスラッパーの実装を返すため、追加操作はサポートされません。アダプタのaddメソッドを使用できるようにするには、サポートされているadd/removeメソッドを使用してバッキングデータをListとして提供する必要があります。ArrayListをお勧めします。objectsasList

したがって、あなたの場合、次のように初期化します。

spinnerArrayAdapter = new ArrayAdapter<String>(
        this, android.R.layout.simple_spinner_item, 
        new ArrayList<String>(Arrays.asList(accounts)));

以上ですが、より効率的です(たとえば、後で破棄されるオーバーヘッドリストオブジェクトを作成しない場合)

final int length = accounts.length;
ArrayList<String> backingData = new ArrayList<String>(length);
for(int i=0; i<length; i++) {
    backingData.add(i, accounts[i]);
}
spinnerArrayAdapter = new ArrayAdapter<String>(
        this, android.R.layout.simple_spinner_item, backingData);
于 2012-05-27T16:30:19.640 に答える
0

これはうまくいくかもしれません...

ArrayList<String> accounts = new ArrayList<String>(Arrays.asList("Item A", "Item B"));
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, R.layout.list_item, accounts);

spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerArrayAdapter.add("Item C");
spinnerArrayAdapter.setNotifyOnChange(true);

spinner.setOnItemSelectedListener(this);
spinner.setAdapter(spinnerArrayAdapter);
于 2012-05-27T15:46:04.443 に答える