私はスピナーでビューを持っています。アクティビティは、親がスピナーに表示する値を追加または削除するポップアップで別のアクティビティを開始します。そのため、onActivityResult() では、fillSpinner() メソッドを呼び出して、Spinner のコンテンツを更新し、追加または削除された値が反映されるようにします。このメソッドのパラメーターは、以前に選択した値です。
private void fillSpinner(String value){
Cursor c = mDbHelper.getAllCategories();
startManagingCursor(c);
c.moveToFirst();
String[] from = new String[]{DBAdapter.KEY_CATEGORY};
SimpleCursorAdapter scCats = new SimpleCursorAdapter(
this, android.R.layout.simple_spinner_item,c,from,
new int[]{android.R.id.text1});
scCats.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
category.setAdapter(scCats);
if (value != null && value != "") {
category.setSelection((int)mDbHelper.categoryIndex(value));
}
}
スピナーを開くと、正しいリストが含まれており (つまり、更新されています)、正しい値が選択されています。ただし、Spinner コントロール自体 (閉じた状態) には、選択された値は表示されませんが、リストの最初の値が表示されます。
デバッガーでコードをステップ実行すると、setSelection() を呼び出す前後で Spinner の値が正しくなります (常に同じ正しい ID で呼び出されます)。ただし、イベントから抜け出せないので、しばらくしてから実行を再開すると、スピナーの値が変化します。
つまり、ポップアップ アクティビティから戻ると、スピナーの表示文字列が変更され、選択した項目とは異なります。
どんなアイデアでも大歓迎です。