Ich habe eine Aktualisierungsansicht, in der ich den in der Datenbank gespeicherten Wert für einen Spinner vorwählen muss.
Ich hatte so etwas im Sinn, aber das Adapter
hat keine indexOf
Methode, also stecke ich fest.
void setSpinner(String value)
{
int pos = getSpinnerField().getAdapter().indexOf(value);
getSpinnerField().setSelection(pos);
}
Eine einfache Möglichkeit, den Spinner basierend auf dem Wert einzustellen, ist
Weg zu komplexem Code gibt es schon, das ist nur viel einfacher.
quelle
break;
wann der Index gefunden wurde, um den Prozess zu beschleunigen.0
, sollten Sie zurückkommen,-1
wenn der Wert nicht gefunden wird - wie in meiner Antwort gezeigt: stackoverflow.com/a/32377917/1617737 :-)0
als Backup-Szenario geschrieben. Wenn Sie festlegen-1
, welches Element beim Drehfeld sichtbar sein soll, nimmt das 0-te Element des Drehfeldadapters an. Durch Hinzufügen von -1 wird auch die Übergewichtung der Überprüfung erhöht, ob der Wert -1 ist oder nicht. Die Einstellung -1 führt zu einer Ausnahme.Ich führe eine separate ArrayList aller Elemente in meinen Spinnern. Auf diese Weise kann ich indexOf für die ArrayList ausführen und dann diesen Wert verwenden, um die Auswahl im Spinner festzulegen.
quelle
Basierend auf Merrills Antwort habe ich diese einzeilige Lösung gefunden ... sie ist nicht sehr hübsch, aber Sie können jedem, der den Code verwaltet, die Schuld geben,
Spinner
dass er es versäumt hat, eine Funktion einzuschließen, die dies dafür tut.Sie erhalten eine Warnung darüber, wie die Besetzung von a
ArrayAdapter<String>
deaktiviert ist ... Sie könnten wirklich eineArrayAdapter
wie Merrill verwenden, aber das tauscht nur eine Warnung gegen eine andere aus.quelle
Wenn Sie ein String-Array verwenden, ist dies der beste Weg:
quelle
Sie können dies auch verwenden,
quelle
Wenn Sie eine indexOf-Methode für einen alten Adapter benötigen (und die zugrunde liegende Implementierung nicht kennen), können Sie Folgendes verwenden:
quelle
Basierend auf Merrills Antwort ist hier, wie man mit einem CursorAdapter umgeht
quelle
Verwenden Sie die folgende Zeile, um den Wert auszuwählen:
quelle
Ich verwende einen benutzerdefinierten Adapter, dafür reicht dieser Code aus:
Ihr Code-Snippet sieht also folgendermaßen aus:
quelle
Dies ist meine einfache Methode, um den Index anhand einer Zeichenfolge abzurufen.
quelle
Sie können auf diese Weise Ihren Code einfacher und klarer gestalten.
Ich hoffe es hilft.
quelle
Hier ist meine Lösung
und getItemIndexById unten
Ich hoffe das hilft!
quelle
So geht's, wenn Sie a verwenden
SimpleCursorAdapter
(wocolumnName
ist der Name der Datenbankspalte, mit der Sie Ihre ausgefüllt habenspinner
):Auch (eine Verfeinerung von Akhils Antwort ) ist dies die entsprechende Methode, wenn Sie Ihren Spinner aus einem Array füllen:
quelle
Wenn Sie im XML-Layout ein XML-Array auf den Drehfeld setzen, können Sie dies tun
quelle
Es gibt tatsächlich eine Möglichkeit, dies mithilfe einer Indexsuche im AdapterArray zu erreichen, und all dies kann mit Reflexion erfolgen. Ich ging sogar noch einen Schritt weiter, da ich 10 Spinner hatte und diese dynamisch aus meiner Datenbank festlegen wollte und die Datenbank nur den Wert und nicht den Text enthält, da sich der Spinner tatsächlich von Woche zu Woche ändert, sodass der Wert meine ID-Nummer aus der Datenbank ist.
Hier ist die indizierte Suche, die Sie für fast jede Liste verwenden können, solange sich die Felder auf der obersten Objektebene befinden.
Die Cast-Methode, die hier für alle Grundelemente erstellt werden kann, ist eine für string und int.
quelle
Um die Anwendung an die zuletzt ausgewählten Spinnerwerte zu erinnern, können Sie den folgenden Code verwenden:
Der folgende Code liest den Spinnerwert und stellt die Spinnerposition entsprechend ein.
Und geben Sie den folgenden Code ein, in dem Sie wissen, dass die neuesten Spinnerwerte vorhanden sind, oder wo erforderlich nach Bedarf. Dieser Code schreibt im Grunde den Spinner-Wert in SharedPreferences.
quelle
Ich hatte das gleiche Problem beim Versuch, das richtige Element in einem Spinner auszuwählen, der mit einem cursorLoader gefüllt wurde. Ich habe die ID des Elements abgerufen, das ich zuerst aus Tabelle 1 auswählen wollte, und dann einen CursorLoader verwendet, um den Spinner zu füllen. In onLoadFinished bin ich durch den Cursor gefahren, der den Adapter des Spinners aufgefüllt hat, bis ich das Element gefunden habe, das mit der ID übereinstimmt, die ich bereits hatte. Weisen Sie dann die Zeilennummer des Cursors der ausgewählten Position des Spinners zu. Es wäre schön, eine ähnliche Funktion zu haben, um die ID des Werts zu übergeben, den Sie im Drehfeld auswählen möchten, wenn Sie Details in ein Formular einfügen, das gespeicherte Drehfeldergebnisse enthält.
quelle
Da einige der vorherigen Antworten sehr richtig sind, möchte ich nur sicherstellen, dass keiner von Ihnen in dieses Problem gerät.
Wenn Sie die Werte auf
ArrayList
using setzenString.format
, MÜSSEN Sie die Position des Werts mit derselben Zeichenfolgenstruktur ermittelnString.format
.Ein Beispiel:
Sie müssen die Position des benötigten Werts wie folgt ermitteln:
Andernfalls erhalten Sie den
-1
Artikel nicht gefunden!Ich habe
Locale.getDefault()
wegen der arabischen Sprache verwendet .Ich hoffe das wird für dich hilfreich sein.
quelle
Hier ist meine hoffentlich vollständige Lösung. Ich habe folgende Aufzählung:
wird in der folgenden Klasse verwendet
Code zum Festlegen des Drehfelds durch HTTPMethod enum-member:
Wo
R.id.spinnerHttpmethod
ist in einer Layout-Datei definiert undandroid.R.layout.simple_spinner_item
wird von Android-Studio geliefert.quelle
quelle
sehr einfach nur benutzen
getSelectedItem();
z.B :
Die obige Methode gibt einen Zeichenfolgenwert zurück
oben
R.array.admin_type
ist das eine String-Ressourcendatei in WertenErstellen Sie einfach eine XML-Datei in Werten >> Zeichenfolgen
quelle
Angenommen, Sie müssen den Spinner aus dem String-Array der Ressource füllen und den Wert vom Server ausgewählt lassen. Dies ist also eine Möglichkeit, einen ausgewählten Wert vom Server im Drehfeld festzulegen.
Ich hoffe es hilft! PS der Code ist in Kotlin!
quelle
Da ich etwas brauchte, das auch mit der Lokalisierung funktioniert , habe ich mir diese beiden Methoden ausgedacht:
Wie Sie sehen können, bin ich auch über die zusätzliche Komplexität der Groß- und Kleinschreibung zwischen arrays.xml und dem, mit dem
value
ich vergleiche , gestolpert . Wenn Sie dies nicht haben, kann die obige Methode wie folgt vereinfacht werden:return arrayValues.indexOf(value);
Statische Hilfsmethode
quelle
Sie müssen Ihren benutzerdefinierten Adapter mit einer Position wie REPEAT [Position] übergeben. und es funktioniert richtig.
quelle