Android Spinner databind-Methode mit array-Liste
Ich habe eine array-Liste wie diese:
private ArrayList<Locations> Artist_Result = new ArrayList<Location>();
Diese Position Klasse hat zwei Eigenschaften: id
und location
.
Muss ich binden meine ArrayList
zu einem spinner. Ich habe versucht, es auf diese Weise:
Spinner s = (Spinner) findViewById(R.id.SpinnerSpcial);
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, Artist_Result);
s.setAdapter(adapter);
Es zeigt jedoch, das Objekt hexadezimal-Wert. So ich denke ich habe den text anzuzeigen und den Wert für das spinner-controller.
Als eine triviale quick-and-dirty-Lösung könntest du einfach implementieren
toString()
im Locations
.InformationsquelleAutor janitheshan | 2011-07-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
ArrayAdapter
versucht, um IhreLocation
-Objekte als strings (die bewirkt, dass die Hex-Werte), indem er die- Objekt.toString()
-Methode. Der default-Implementierung gibt:Machen die
ArrayAdadpter
zeigen etwas, das wirklich nützlich in der Artikel-Liste können Sie überschreiben dietoString()
-Methode zum zurückgeben, etwas sinnvolles:Ein anderer Weg, dies zu tun ist, zu erweitern BaseAdapter und implementieren SpinnerAdapter erstellen Sie Ihre eigenen Adapter, der weiß, dass die Elemente in Ihrem
ArrayList
sind Objekte und wie die Eigenschaften dieser Objekte.[Überarbeitet] - Implementierung Beispiel
Spielte ich ein wenig herum, und ich es geschafft, etwas zu bekommen, um zu arbeiten:
Ich voll kommentierten code, wenn Sie Fragen haben, zögern Sie nicht, Sie zu stellen.
Ich aktualisierte mein Beitrag mit einer Beispiel-Implementierung.
Vielen Dank Lukas Knuth dein Beispiel funktioniert einwandfrei. Vielen Dank :)))))
die "getViewTypeCount" - Methode falsch behandelt. Für diese Art der adpater sollte es wieder 1. Adapter versuchen zu recyceln Ansichten und wenn Sie wissen, dass es mehr als 1 Ansichten kann es nicht recyceln Sie optimal. Lesen Sie JavaDoc für diese Methode.
das ist wirklich schön, aber das einzige, was mich nervt ist
@Override public int getItemViewType(int position) { return android.R.layout.simple_spinner_dropdown_item; }
funktioniert nicht.InformationsquelleAutor Lukas Knuth
Einfachste Lösung
Nach dem reinigen verschiedene Lösungen an, SO fand ich die folgenden auf das einfachste und sauberste Lösung für das Auffüllen einer
Spinner
mit benutzerdefiniertenObjects
. Hier ist die vollständige Umsetzung:Location.java
res/layout/spinner.xml
res/layout/your_activity_view.xml
In Ihre Tätigkeit
InformationsquelleAutor Joshua Pinter
Dank Lukas' Antwort oben (unten?) Ich war in der Lage, begonnen zu erhalten, aber mein problem war, dass seine Umsetzung von den
getDropDownView
aus der dropdown-Elemente, die nur plain - text also keine Polsterung und keine schönen grünen radio-Taste, wie Sie bei der Verwendung derandroid.R.layout.simple_spinner_dropdown_item
.So, wie oben beschrieben, mit Ausnahme der
getDropDownView
Methode wäre:Danke, ich habe die Suche für das für viel zu lange jetzt.
InformationsquelleAutor Mick Byrne
Gut, ich bin nicht gonna verwechseln mit mehr details.
Erstellen Sie einfach Ihre
ArrayList
und binden Sie Ihre Werte wie diese.Angenommen, Sie haben bereits ein Drehfeld-Steuerelement auf Ihrem layout sagen mit id
spinner1
. Fügen Sie diesen code unten.Alle der oben genannten code geht unter die
onCreate
Funktion.InformationsquelleAutor Shankar Damodaran
Danke Lukas, Sie helfen mir sehr.
I d'like zu verbessern Ihre Antwort.
Wenn Sie nur wollen, um Zugriff auf das ausgewählte Element höher, diese können Sie verwenden :
So dass Sie nicht haben, verwenden Sie die setOnItemSelectedListener() in der Initialisierung 🙂
InformationsquelleAutor alphayax