101 votes

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 de ArrayAdapter, le programme se bloquait avec une erreur java.lang.UnsupportedOperationException . 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, supprimer et effacer les méthodes, et aucune d'entre elles n'a fonctionné. Est-ce que quelqu'un pourrait me dire ce que j'ai mal fait?

301voto

st0le Points 15318

Je l'ai essayé, moi-même...Trouvé, il ne fonctionne pas. J'ai donc vérifier le code source de ArrayAdapter et a trouvé le problème. Le ArrayAdapter, sur le fait d'être initialisé par un tableau, convertit le tableau dans un AbstractList (Liste) qui ne peuvent pas être modifiés.

Solution Utiliser un ArrayList<String> au lieu d'utiliser un tableau lors de l'initialisation du ArrayAdapter.

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

Cheers!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X