2

I'd like to update values of my ArrayAdapter if the first element is selected :

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();             
        }           
    }           
});

But the clear method (adapter) triggered an exception

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)

Any idea ?

Thank you for reading.

Praful Bhatnagar
  • 7,425
  • 2
  • 36
  • 44
johann
  • 1,115
  • 8
  • 34
  • 60

3 Answers3

8

Pass your own list instead of array to adapter. Adapter converts array to list using Arrays.asList method and list returned by this method doesn't support removal. You can create instance of ArrayList from your array and pass it to adapter:

List<String> values = new ArrayList<String>(Arrays.asList(categoriesArray));
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);

But better check very similar question mentioned by @PrafulBhatnagar: Unable to modify ArrayAdapter in ListView: UnsupportedOperationException

Community
  • 1
  • 1
Mikita Belahlazau
  • 15,326
  • 2
  • 38
  • 43
4

You do not need to reinitialize the adapter, if you just want to change the data set. Try the following code -

adapter.clear();
adapter.addAll(categoriesArray);
0xC0DED00D
  • 19,522
  • 20
  • 117
  • 184
2

check out answer to this post

Unable to modify ArrayAdapter in ListView: UnsupportedOperationException

As per this post you should use ArrayList in place of string array...

Community
  • 1
  • 1
Praful Bhatnagar
  • 7,425
  • 2
  • 36
  • 44