Android 更改ArrayAdapter的值

Android 更改ArrayAdapter的值,android,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.setOnIt

如果选择了第一个元素,我想更新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();             
        }           
    }           
});
有什么想法吗


感谢阅读。

将您自己的列表而不是数组传递给适配器。适配器使用
数组将数组转换为列表。asList
方法和此方法返回的列表不支持删除。您可以从阵列中创建
ArrayList
的实例,并将其传递给适配器:

List<String> values = new ArrayList<String>(Arrays.asList(categoriesArray));
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);
List values=newarraylist(Arrays.asList(categoriesArray));
adapter=new ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1的值);

但最好检查一下@PrafulBhatnagar提到的非常类似的问题:

将您自己的列表而不是数组传递给适配器。适配器使用
数组将数组转换为列表。asList
方法和此方法返回的列表不支持删除。您可以从阵列中创建
ArrayList
的实例,并将其传递给适配器:

List<String> values = new ArrayList<String>(Arrays.asList(categoriesArray));
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);
List values=newarraylist(Arrays.asList(categoriesArray));
adapter=new ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1的值);

但最好看看@PrafulBhatnagar提到的非常类似的问题:

看看这篇文章的答案


根据这篇文章,你应该使用
ArrayList
代替字符串数组…

查看这篇文章的答案


根据本文,您应该使用
ArrayList
代替字符串数组…

如果您只想更改数据集,则无需重新初始化适配器。请尝试以下代码-

adapter.clear();
adapter.addAll(categoriesArray);

如果只想更改数据集,则无需重新初始化适配器。请尝试以下代码-

adapter.clear();
adapter.addAll(categoriesArray);

你第一次在哪里初始化你的
categoriesArray
?查看本帖的答案你第一次在哪里初始化你的
categoriesArray
?查看本帖的答案