android - 更改 ArrayAdapter 的值

标签 android android-arrayadapter

如果选择了第一个元素,我想更新我的 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)

有什么想法吗?

感谢阅读。

最佳答案

将您自己的列表而不是数组传递给适配器。适配器使用 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

关于android - 更改 ArrayAdapter 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14052641/

相关文章:

android - 从用户获取签名作为 Android (Eclipse) 中的输入

javascript - DukTape `require()` 抛出 `TypeError: undefined not callable`

android - 在 fragment 中为 ListView 设置适配器

android - 不显示 RadioGroup 的 ListView

Android:SwitchCompat、填充和颜色问题

android - OnTouch 将发光效果应用到图像中心

android - 撤销个人权限后更新 session

android - ArrayAdapter 无法更新内容

Android如何知道选中了哪个复选框

android - 更新有关自动完成 TextView 项目单击的建议