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をお勧めします。objects
asList
したがって、あなたの場合、次のように初期化します。
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);