我尝试在删除值后重新填充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.itemlist
是String[]
类型的数组。
现在,项目已从微调器移除,但使用上述代码不会将Spinner
的值重置为Static.itemList
中存储的列表。在我看来,这应该有用,但显然缺少一些东西,因为它没有。
可以在https://github.com/Uruwolf/VO-Miner/blob/master/src/com/uruwolf/vominer/VoMinerActivity.java找到完整的代码。问题的方法是从第142行到第147行(我知道缩进是关闭的,它在我的编辑器中看起来很好。我不知道为什么它不对在github)。
这是我关于StackOverflow的第一个问题,所以如果我做错了,请告诉我。
答案 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 */