flopi Posted March 5, 2010 Share Posted March 5, 2010 (edited) 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.... Edited March 11, 2010 by flopi Quote Link to comment Share on other sites More sharing options...
Cyril Mottier Posted March 5, 2010 Share Posted March 5, 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 :) Quote Link to comment Share on other sites More sharing options...
flopi Posted March 5, 2010 Author Share Posted March 5, 2010 Ok merci. Je vais essayer de créer mon propre ArrayAdapter. Je posterai le code .... Flopi Quote Link to comment Share on other sites More sharing options...
Cyril Mottier Posted March 5, 2010 Share Posted March 5, 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. Quote Link to comment Share on other sites More sharing options...
flopi Posted March 5, 2010 Author Share Posted March 5, 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 Quote Link to comment Share on other sites More sharing options...
flopi Posted March 5, 2010 Author Share Posted March 5, 2010 (edited) 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 Edited March 5, 2010 by flopi Quote Link to comment Share on other sites More sharing options...
Burn2 Posted June 19, 2010 Share Posted June 19, 2010 Merci d'avoir poster ton code ça m'est très utile! Quote Link to comment Share on other sites More sharing options...
dawadam Posted February 15, 2011 Share Posted February 15, 2011 (edited) 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); Edited February 15, 2011 by dawadam Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.