Ich arbeite an einem Android-Projekt und verwende einen Spinner, der einen Array-Adapter verwendet, der aus der Datenbank gefüllt wird.
Ich kann nicht herausfinden, wie ich das ausgewählte Element programmgesteuert aus der Liste festlegen kann. Zum Beispiel, wenn ich im Spinner die folgenden Gegenstände habe:
- Kategorie 1
- Kategorie 2
- Kategorie 3
Wie würde ich Kategorie 2 programmgesteuert zum ausgewählten Element machen, wenn der Bildschirm erstellt wird? Ich dachte, es könnte ähnlich sein wie c # IE Spinner.SelectedText = "Kategorie 2", aber es scheint keine ähnliche Methode für Android zu geben.
spinner.setSelection()
. Das würde gut funktionieren. Sie können auch eine Methode erstellen, mit der Sie Ihre Indizes an die tatsächlichen Zeichenfolgen anpassen können.Antworten:
Verwenden Sie Folgendes :
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
.quelle
mySpinner.setSelection(arrayAdapter.getPosition("Category 2"));
Keine dieser Antworten gab mir die Lösung, arbeitete nur damit:
quelle
Sie können die oben genannten wie folgt verwenden:
& natürlich kannst du auch per index direkt wie auswählen
quelle
Category 2
der ich annehme, ein String ist (vorausgesetzt, er hat es versuchtSpinner.SelectedText = "Category 2"
), aber der obige Code ist für along
.adapter.getItem(position)
nicht seinadapter.getItemId(position)
.Einige Erklärungen (zumindest für Fragmente - nie mit reiner Aktivität versucht). Hoffe, es hilft jemandem, Android besser zu verstehen.
Die beliebteste Antwort von Arun George ist richtig, funktioniert aber in einigen Fällen nicht.
Die Antwort von Marco HC verwendet Runnable, was aufgrund der zusätzlichen CPU-Auslastung ein letzter Ausweg ist.
Die Antwort ist - man sollte einfach richtige Stelle wählen , um setSelection () aufrufen , zum Beispiel es funktioniert für mich:
In onCreateView () funktioniert dies jedoch nicht . Ich vermute, das ist der Grund für das Interesse an diesem Thema.
Das Geheimnis ist, dass Sie mit Android in keiner Methode alles tun können, was Sie wollen - oops :( - Komponenten sind möglicherweise nicht bereit. Als weiteres Beispiel können Sie ScrollView weder in onCreateView () noch in onResume () () scrollen siehe die Antwort hier )
quelle
So finden Sie einen Wert und wählen ihn aus:
quelle
Warum verwenden Sie nicht Ihre Werte aus der Datenbank und speichern sie in einer ArrayList und verwenden dann einfach:
quelle
Die optimale Lösung ist:
Um die Position des Elements zu ermitteln, fügen Sie automatisch die folgende Anweisung hinzu
quelle
Sie können eine generische Methode für diese Art von Arbeit erstellen, wie ich es in meiner UtilityClass tue
quelle
Sie können dies einfach so einstellen:
spinner.setSelection(1)
Anstelle von 1 können Sie eine beliebige Position der Liste festlegen, die Sie anzeigen möchten.quelle
Ich habe einen SimpleCursorAdapter, daher muss ich die Daten duplizieren, um die Antwort in diesem Beitrag zu verwenden. Ich empfehle Ihnen daher, Folgendes zu versuchen:
Ich denke das ist ein echter Weg
quelle
Das ist Arbeit für mich.
quelle
Wenn Sie eine Kontaktliste haben, können Sie dies tun:
quelle
Ich weiß, dass das bereits beantwortet wurde, aber einfacher Code zum Auswählen eines Elements, sehr einfach:
quelle
quelle
Dies wird in den Kommentaren an anderer Stelle auf dieser Seite angegeben, hielt es jedoch für nützlich, eine Antwort daraus zu ziehen:
Bei Verwendung eines Adapters habe ich festgestellt, dass die
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
Anforderungen nach demsetAdapter
Aufruf auftreten müssen. Andernfalls ist das erste Element immer die anfängliche Auswahl.Dies wird durch Überprüfen des AbsSpinner- Codes für bestätigt
setAdapter
.quelle
Folgendes verwende ich in Kotlin:
quelle
indexOf
keine Übereinstimmung hergestellt werden kann, wird zurückgegeben-1
, was anscheinend dazu führt, dass der Standardwert von ausgewählt wirdspinner.setSelection
. Das ist ok für mich.In meinem Fall hat dieser Code meinen Tag gerettet:
quelle
Meistens
spinner.setSelection(i); //i is 0 to (size-1) of adapter's size
funktioniert es nicht. Wenn Sie nur anrufenspinner.setSelection(i);
Es hängt von Ihrer Logik ab.
Wenn die Ansicht vollständig geladen ist und Sie sie über die Benutzeroberfläche aufrufen möchten, empfehlen wir Ihnen, sie aufzurufen
Oder rufen Sie wie folgt auf, wenn Sie zwischen Aktivität / Fragmentlebenszyklus wechseln möchten
quelle
Ich hatte eine Erweiterungsfunktion
Spinner
zum Laden von Daten und Verfolgen der Artikelauswahl erstellt.Spinner.kt
Verwendungsbeispiel
quelle
Das hat bei mir funktioniert:
Es ähnelt der Lösung von @ sberezin, ruft jedoch setSelection () in onStart () auf.
quelle
Ich hatte das gleiche Problem seit gestern. Leider wird das erste Element in der Array-Liste standardmäßig im Spinner-Widget angezeigt. Eine Trendwende besteht darin, das zuvor ausgewählte Element mit jedem Element in der Array-Liste zu finden und seine Position mit dem ersten Element zu tauschen. Hier ist der Code.
quelle