Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to modify ArrayAdapter in ListView: UnsupportedOperationException

I'm trying to make a list containing names. This list should be modifiable (add, delete, sort, etc). However, whenever I tried to change the items in the ArrayAdapter, the program crashed, with java.lang.UnsupportedOperationException error. Here is my code:

ListView panel = (ListView) findViewById(R.id.panel); String[] array = {"a","b","c","d","e","f","g"}; final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array); adapter.setNotifyOnChange(true); panel.setAdapter(adapter);  Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View v) {       adapter.insert("h", 7);    } }); 

I tried insert, remove and clear methods, and none of them worked. Would someone tell me what I did wrong?

like image 361
Ryan Avatar asked Jul 08 '10 03:07

Ryan


1 Answers

I tried it out, myself...Found it didn't work. So i check out the source code of ArrayAdapter and found out the problem. The ArrayAdapter, on being initialized by an array, converts the array into a AbstractList (List) which cannot be modified.

Solution Use an ArrayList<String> instead using an array while initializing the ArrayAdapter.

String[] array = {"a","b","c","d","e","f","g"};  ArrayList<String> lst = new ArrayList<String>(Arrays.asList(array)); final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,  android.R.layout.simple_list_item_1, lst);  

Cheers!

like image 107
st0le Avatar answered Oct 19 '22 11:10

st0le