Spinner-Elemente basierend auf dem ausgewählten Element eines anderen Spinner aktualisieren

9

Ich versuche ein Spinner durch ein ausgewähltes Element von einem anderen Spinner zu aktualisieren. Der folgende Codeblock beschreibt, wie ich es gemacht habe.

Ich konnte den Spinner3 mit der if-Anweisung in der onItemSelected () -Methode erfolgreich aktualisieren. Aber mein Problem ist, dass es scheint, dass eine Schleife läuft, die automatisch den Wert "5" von spinner2 auswählt (so dass der Toast nur ausspuckt "Du hast 5 gewählt").

Wenn die Aktivität geladen ist, zeigt der Toast jede Auswahl aus allen drei Spinner an. Bedeutet dies, dass die erste Auswahl für jeden Spinner erfolgt, wenn ein Adapter auf einen Spinner gesetzt ist?

Und löst die Bindung von adapter3 an spinner3 (in der if-Anweisung) eine neue Auswahl von spinner2 aus?

Vielen Dank im Voraus!

%Vor%

Das Folgende sind die XML-Dateien. Dies ist das String-Array für spinner2:

%Vor%

Das String-Array für spinner3:

%Vor%

Ich habe gerade meine Probleme gefunden.

Im ursprünglichen Code:

%Vor%

wird in onItemSelectedListener aufgerufen. Wenn ein Adapter auf AdapterView eingestellt ist, wird das erste Element auf dem Adapter automatisch einmal ausgewählt. So wird der Hörer erneut ausgelöst.

Und da ich kein Flag gesetzt habe, um zu unterscheiden, ob die Auswahl von spinner2 kommt und die spinner3.setAdapter(adapter3) , wird einfach weiter "das erste Element auf Adapter3 auswählen - prüfen, ob das ausgewählte Element 5 ist" Schleife.

Das Einfügen des folgenden Flags in den ursprünglichen Code funktioniert also für mich:

%Vor%     
Bao 20.03.2012, 05:26
quelle

3 Antworten

2

Ich würde vorschlagen, dass Sie die vom onItemclickListener zurückgegebene Position verwenden und sie in einem Array verwenden, das den Array-Adapter für diesen Spinner initialisiert: like ---

'

%Vor%

'

und so weiter ...

    
user987171 20.03.2012 06:01
quelle
0

Wenn der Spinner wechselt, legen Sie die Daten in den Adapter des nächsten Spinner. Und schreiben Sie einfach adapter.notifyDataSetChanged(); Der Inhalt innerhalb des nächsten Spinner wird sich ändern.

    
mayur rahatekar 20.03.2012 05:46
quelle
0

Wenn ich Ihre Frage richtig verstanden habe, wählt der Spinner standardmäßig einen Wert aus. Ja, das ist richtig, wenn der Spinner auf einen Adapter setzt, wählt er den ersten Wert. Sie müssen einen einfachen Hack in onItemselectedListener schreiben, um diese Standardauswahl zu löschen. nimm eine int Variable = -1 In meinem Code ist es Altersposition Ich nehme einen booleschen Alterswert, um die Standardauswahl zu finden. if (ageselected) bedeutet Spinner, der vom Benutzer ausgewählt wurde.

schließlich verwenden Sie ageSpinner.setOnItemSelectedListener (new MyOnItemSelectedListener ());

%Vor%

Ich hoffe, der obige Code hilft Ihnen

    
Manju 20.03.2012 06:28
quelle

Tags und Links