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?
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é!