webentwicklung-frage-antwort-db.com.de

wie füge ich ein Element zum ArrayAdapter von Spinner hinzu?

ich hatte einen EditText, einen Button und einen Spinner. Wenn Sie auf die Schaltfläche klicken, fügt der Drehknopf ein neues Element mit dem Namen hinzu, den Sie in EditText eingegeben haben. Aber hier ist die Frage, meine adapter.add () -Methode scheint nicht zu funktionieren ... hier ist mein 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) {

        }});
}

}

vielen Dank! ... wartet noch

14
allen

Wenn Sie Ihren ArrayAdapter erstellt haben, haben Sie ihm keine anpassbare Liste zugewiesen. Wenn Sie also () hinzufügen, kann er die Größe nicht erhöhen und löst eine UnsupportedOperationException aus.

Versuchen Sie so etwas:

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

Sie sollten eine Liste verwenden. Mit einem Array wie CharSequence [] erhalten Sie die gleiche Ausnahmebedingung UnsupportedOperationException.

14
Javi

Javi hat recht, außer dass er kein Array für den zweiten Parameter referenziert.

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

Ich glaube, das funktioniert wie geplant, aber nicht wie erwartet. ArrayAdapter diente nur zur Aufnahme eines Arrays, der Listenkonstruktor wurde jedoch später hinzugefügt. Ich vermute, es macht einfach ein toArray () auf Ihrer Liste. Aus diesem Grund müssen Sie entweder add auf dem Adapter aufrufen oder einen neuen Adapter erstellen, wenn sich Ihre Liste ändert.

1
AdamC

sie können eine Arrayliste erstellen und den gesamten Zugriff auf dieses Objekt kopieren, anschließend einen Arrayadapter erstellen und diese Arrayliste senden. Fügen Sie im OnClickListener der Schaltfläche Edittext-Inhalt zum Arraylisten-Objekt hinzu und rufen Sie notifydatasetchanged of adator auf

0
Hossein