Aller au contenu

[RESOLU] insérer un élément dans un ArrayAdapter


flopi

Recommended Posts

je développe une application Android avec un spinner (menu déroulant) à partir d'une "resource" android (ie un fichier xml) en utilisant un array adapter.

Avant l'affichage, je souhaite insérer une CharSequence en début de liste. J'ai une exception : ERROR/AndroidRuntime(437): Caused by: java.lang.UnsupportedOperationException"

Et la cause de cette exception semble venir du code de ArrayAdapter :

03-05 11:21:54.362: ERROR/AndroidRuntime(361): at android.widget.ArrayAdapter.insert(ArrayAdapter.java:196)

En fouillant un peu sur le web, j'ai trouvé le code et la ligne qui provoque l'erreur. L'erreur dans le code donne : cannot execute pushFront() on a native array.

Voici mon code :

ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.devises_array, android.R.layout.simple_spinner_item);
       adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner spinner = (Spinner) findViewById(R.id.spinner);

CharSequence dev0 = new String("TOTO");
adapter.insert(dev0, 0);

spinner.setAdapter(adapter); 

Quelqu'un naurait-il une idée de ce qui ne va pas ??

merci pour vos suggestions....

Modifié par flopi
Lien vers le commentaire
Partager sur d’autres sites

Ton problème vient tout simplement de l'utilisation de "createFromResource" qui utilise la méthode gesTextArray pour récupérer les textes à afficher. C'est très pratique puisque tu réduit drastiquement le nombre de lignes de code mais cela empêche malheureusement la modification de ce tableau puisque ça n'est pas un tableau "modifiable" (tableau natif).

Si tu veux pouvoir modifier le tableau contenu dans ArrayAdapter il faut simplement créer ton ArrayAdapter à partir d'un tableau modifiable (ArrayList par exemple). Tu devras donc ne plus utiliser le "createFromResource" mais créer l'Adapter à la main (adapter = new ArrayAdapter( ... )).

Bon courage :)

Lien vers le commentaire
Partager sur d’autres sites

Je posterai le code ....

Flopi

Je pense que je dois prendre ça comme "tu aurais pu poster du code" :D. Désolé mais je préfère toujours donner les pistes plutôt que d'aider les développeurs en donnant directement la solution (c'est pas "aider" que de résoudre le problème).

Ne t'inquiètes pas c'est pas très difficile.

Lien vers le commentaire
Partager sur d’autres sites

Je posterai le code ....

Flopi

Je pense que je dois prendre ça comme "tu aurais pu poster du code" :D. Désolé mais je préfère toujours donner les pistes plutôt que d'aider les développeurs en donnant directement la solution (c'est pas "aider" que de résoudre le problème).

Ne t'inquiètes pas c'est pas très difficile.

ah non pas du tout :|

je préfère faire le code moi même pour que ça rentre dans ma p'tite tête et que ça y reste pour la suite :P

Lien vers le commentaire
Partager sur d’autres sites

Et hop j'ai réussi ! j'ai un peu contourné le problème en insérant mon élément dans le ArrayList au lieu du ArrayAdapter mais ça fonctionne :

String[] listdev = getApplicationContext().getResources().getStringArray(R.array.my_array);
       ArrayList list = new ArrayList();
       list.add("Toto");
       for(i=0; i            list.add(listdev[i]);
       }
       ArrayAdapter m_adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, list);
       m_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

       Spinner spinner = (Spinner) findViewById(R.id.spinner2);

       spinner.setAdapter(m_adapter);
       spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());

Merci Cyril pour m'avoir mise sur la piste ! :D

Modifié par flopi
Lien vers le commentaire
Partager sur d’autres sites

  • 3 months later...
  • 7 months later...

G utilisé le code qui était pas paufiné, alors voici une version clean :

	ArrayList<String> list = new ArrayList<String>();
	list.add("Toto");
	list.add("Robert");
	ArrayAdapter<String> m_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
	Spinner spinner = (Spinner) findViewById(R.id.spin_liste);
	spinner.setAdapter(m_adapter);
	// spinner.setOnItemSelectedListener(this);

Modifié par dawadam
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...