1

Spinner値が削除された後に再入力しようとしています。

現在、アプリは文字列値のリストを使用して をセットアップしSpinner、アプリが使用されると、これらの値の一部が から削除されますArrayAdaptor。その後、ある時点でSpinnerのリストをデフォルトの値リストにリセットする必要があります。私の現在のコードは、単に新しいを作成し、最初に設定されたのと同じ文字列配列リソースを使用してArrayAdaptorこれをに割り当てます。SpinnerSpinner

Spinner mySpinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1,
    Static.itemList);
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(arrayAdapter);

Static.itemlistは型の配列ですString[]

現状では、アイテムはスピナーから削除されますが、上記のコードを使用しても、Spinnerの値が に保存されているリストにリセットされませんStatic.itemList。私の考えでは、これはうまくいくはずですが、うまくいかないので明らかに何かが欠けています。

完全なコードはhttps://github.com/Uruwolf/VO-Miner/blob/master/src/com/uruwolf/vominer/VoMinerActivity.javaにあります。問題のメソッドは 142 行目から 147 行目です (そして、私はそれを知っています)。インデントがオフになっていますが、私のエディターでは問題ないように見えますが、なぜ github で正しくないのかわかりません)。

これは StackOverflow に関する初めての質問です。間違ったことをした場合はお知らせください。

4

1 に答える 1

3

リストを変更した後、アダプタで notifyDataSetChanged() を呼び出す必要がある場合があります。

メインリストにデータを再追加した後、新しいアダプターを再作成して notifyDataSetChanged() を呼び出すのを避ける方が良いと思います。アダプターが指しているデータのリストを除いて、アダプター内の何も変更されていないため、実際にアダプターを再作成する必要はありません。アダプターはリストを指すだけで、リスト自体を消費/格納しないため、参照されたリストを変更すると、アダプターは変更を取得できるはずです (通知された場合)。

このようなものがうまくいくかもしれません

変数を定義する

Static.itemlist ... /*This list is static. Data never changes */
List<String> myListOfStrings;
ArrayAdapter<String> arrayAdapter;

スピナーとアダプターを初期化する

Spinner mySpinner = (Spinner) findViewById(R.id.spinner); 

arrayAdapter = new ArrayAdapter<String>(this,     android.R.layout.simple_list_item_1,     myListOfStrings);

arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

mySpinner.setAdapter(arrayAdapter); 

アダプターのリフレッシュ

myListOfStrings.clear();

myListOfStrings.addAll(Static.itemList); = /* Copy/Add the data from Static.itemList into myListOfStrings */

arrayAdapter.notifyDataSetChanged(); /* Inform the adapter  we've changed items, which should force a refresh */
于 2012-05-22T19:24:52.883 に答える