flopi Posté(e) 5 mars 2010 Share Posté(e) 5 mars 2010 (modifié) 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é 11 mars 2010 par flopi Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cyril Mottier Posté(e) 5 mars 2010 Share Posté(e) 5 mars 2010 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 :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
flopi Posté(e) 5 mars 2010 Auteur Share Posté(e) 5 mars 2010 Ok merci. Je vais essayer de créer mon propre ArrayAdapter. Je posterai le code .... Flopi Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cyril Mottier Posté(e) 5 mars 2010 Share Posté(e) 5 mars 2010 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
flopi Posté(e) 5 mars 2010 Auteur Share Posté(e) 5 mars 2010 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
flopi Posté(e) 5 mars 2010 Auteur Share Posté(e) 5 mars 2010 (modifié) 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é 5 mars 2010 par flopi Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 19 juin 2010 Share Posté(e) 19 juin 2010 Merci d'avoir poster ton code ça m'est très utile! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
dawadam Posté(e) 15 février 2011 Share Posté(e) 15 février 2011 (modifié) 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é 15 février 2011 par dawadam Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.