web-dev-qa-db-fra.com

comment ajouter un élément à ArrayAdapter de Spinner?

j'ai eu un EditText, un bouton et un spinner. Lorsque vous cliquez sur le bouton, le compteur ajoutera un nouvel élément avec le nom que vous avez entré dans le texte d'édition. Mais voici la question, ma méthode adapter.add () semble ne pas fonctionner ... voici mon code:

public class Spr extends Activity {
Button bt1;
EditText et;
ArrayAdapter<CharSequence> adapter;
Spinner spinner;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    bt1 = (Button)this.findViewById(R.id.bt1);
    et = (EditText)this.findViewById(R.id.et);  
    spinner = (Spinner)this.findViewById(R.id.spr);

    adapter = ArrayAdapter.createFromResource(
            this, R.array.planets_array, Android.R.layout.simple_spinner_item);

    adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);

    spinner.setAdapter(adapter);

    bt1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            String temp = et.getText().toString();

            adapter.add(temp);
            adapter.notifyDataSetChanged();
            spinner.setAdapter(adapter);

        }
    });


    spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int pos, long id) {

            Toast.makeText(parent.getContext(), "The planet is " +
                      parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {

        }});
}

}

merci! ... encore en attente

14
allen

Lorsque vous avez créé votre ArrayAdapter, vous ne lui avez pas attribué de liste redimensionnable. Par conséquent, lorsque vous ajoutez add (), il ne peut pas en incrémenter la taille et lève une exception UnsupportedOperationException.

Essayez quelque chose comme ça:

List<CharSequence> planets = new ArrayList<CharSequence>();
adapter = new ArrayAdapter<CharSequence>(context,
                       R.array.planets_array, planets);
//now you can call adapter.add()

Vous devriez utiliser une liste. Avec un tableau tel que CharSequence [], vous obtiendrez la même exception UnsupportedOperationException.

14
Javi

Javi a raison sauf que vous ne faites pas référence à un tableau pour le second paramètre.

adapter = new ArrayAdapter<CharSequence>(this,
  Android.R.layout.simple_spinner_item,
  someList);
3
trgraglia

Je crois que cela fonctionne comme prévu, mais pas comme prévu. ArrayAdapter ne prenait habituellement qu'un tableau, mais le constructeur de liste a été ajouté ultérieurement. Je suppose que c'est juste en train de faire un toArray () sur votre liste. C'est pourquoi vous devez soit appeler add sur l'adaptateur, soit créer un nouvel adaptateur lorsque votre liste change.

1
AdamC

vous pouvez créer un arraylist et copier tout le recours à cet objet, puis créer arrayadaptor et envoyer cet arraylist et dans onclicklistener de button, ajouter un contenu edittext à un objet arraylist puis appeler notifydatasetchanged d'adator

0
Hossein