删除值后重置微调器

时间:2012-05-22 18:52:42

标签: java android spinner default reset

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

目前,该应用会设置一个Spinner,其中包含一个字符串值列表,然后在使用该应用时,会从ArrayAdaptor中删除其中一些值。然后在某些时候需要使用默认值列表重置Spinner的列表。我当前的代码只是创建一个新的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.itemlistString[]类型的数组。

现在,项目已从微调器移除,但使用上述代码不会将Spinner的值重置为Static.itemList中存储的列表。在我看来,这应该有用,但显然缺少一些东西,因为它没有。

可以在https://github.com/Uruwolf/VO-Miner/blob/master/src/com/uruwolf/vominer/VoMinerActivity.java找到完整的代码。问题的方法是从第142行到第147行(我知道缩进是关闭的,它在我的编辑器中看起来很好。我不知道为什么它不对在github)。

这是我关于StackOverflow的第一个问题,所以如果我做错了,请告诉我。

1 个答案:

答案 0 :(得分: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 */