1

我正在尝试重新填充Spinner删除值后的值。

目前,该应用程序设置了一个Spinner字符串值列表,然后随着应用程序的使用,其中一些值从ArrayAdaptor. 然后在某些时候Spinner需要使用默认值列表重置 's 列表。我当前的代码只是创建一个新的ArrayAdaptor并将其分配给Spinner使用Spinner最初设置的相同字符串数组资源:

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's 的值重置为存储在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 回答