Jump to content

[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....

Edited by flopi
Link to comment
Share on other 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 :)

Link to comment
Share on other 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.

Link to comment
Share on other 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

Link to comment
Share on other 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

Edited by flopi
Link to comment
Share on other 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);

Edited by dawadam
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...