web-dev-qa-db-fra.com

Impossible de modifier ArrayAdapter dans ListView: UnsupportedOperationException

J'essaie de faire une liste contenant des noms. Cette liste doit être modifiable (ajouter, supprimer, trier, etc.). Cependant, chaque fois que j'essayais de modifier les éléments dans ArrayAdapter, le programme se bloquait, avec Java.lang.UnsupportedOperationException Erreur. Voici mon 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);
   }
});

J'ai essayé d'insérer, de supprimer et d'effacer des méthodes, et aucune d'entre elles n'a fonctionné. Quelqu'un me dirait-il ce que j'ai fait de mal?

94
Ryan

Je l'ai essayé moi-même ... J'ai trouvé que ça ne fonctionnait pas. J'ai donc vérifié le code source de ArrayAdapter et découvert le problème. ArrayAdapter, après avoir été initialisé par un tableau, convertit le tableau en AbstractList (List) qui ne peut pas être modifié.

Solution Utilisez un ArrayList<String> à la place en utilisant un tableau lors de l'initialisation de 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); 

À votre santé!

273
st0le