如果选择了第一个元素,我想更新ArrayAdapter的值:
public ArrayAdapter<String> adapter;
String[] categoriesArray;
...
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, categoriesArray);
list.setAdapter(adapter);
list.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
if(arg2== Consts.GAME_CATEGORY_POSITION){
adapter.clear();
//Add new values to array
categoriesArray = new String[subCategories.size()];
for (int i=0; i<subCategories.size(); i++) {
categoriesArray[i] = subCategories.get(i).getSub_name();
}
adapter.notifyDataSetChanged();
}
}
});
但是clear方法(适配器)触发了异常
12-27 09:37:57.376: E/AndroidRuntime(1423): java.lang.UnsupportedOperationException
12-27 09:37:57.376: E/AndroidRuntime(1423): at java.util.AbstractList.remove(AbstractList.java:638)
12-27 09:37:57.376: E/AndroidRuntime(1423): at java.util.AbstractList$SimpleListIterator.remove(AbstractList.java:75)
12-27 09:37:57.376: E/AndroidRuntime(1423): at java.util.AbstractList.removeRange(AbstractList.java:658)
12-27 09:37:57.376: E/AndroidRuntime(1423): at java.util.AbstractList.clear(AbstractList.java:466)
12-27 09:37:57.376: E/AndroidRuntime(1423): at android.widget.ArrayAdapter.clear(ArrayAdapter.java:258)
有什么想法吗?
感谢您的阅读。
答案 0 :(得分:7)
将您自己的列表而不是数组传递给适配器。适配器使用Arrays.asList
方法将数组转换为列表,此方法返回的列表不支持删除。您可以从数组中创建ArrayList
的实例并将其传递给适配器:
List<String> values = new ArrayList<String>(Arrays.asList(categoriesArray));
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);
但最好检查@PrafulBhatnagar提到的非常相似的问题:Unable to modify ArrayAdapter in ListView: UnsupportedOperationException
答案 1 :(得分:3)
如果您只想更改数据集,则无需重新初始化适配器。请尝试以下代码 -
adapter.clear();
for(int i = 0;i<categoriesArray.length;i++){
adapter.add(categoriesArray[i]);
}
答案 2 :(得分:2)
查看这篇文章的答案
Unable to modify ArrayAdapter in ListView: UnsupportedOperationException
根据这篇文章,您应该使用ArrayList
代替字符串数组...