it-swarm.com.de

ID für Spinner-Artikel festlegen

Ich habe ein Array von Strings, mit denen ich ein Spinner-Objekt fülle. Ich möchte jedoch an jedes Element des Spinners eine ID anhängen. Wenn der Benutzer ein Element auswählt, kann ich dessen ID verwenden, um es in einem anderen Datenelement zu speichern. Wie kann ich das machen?

30
Andrew

Was meinst du mit id? Sie können ArrayAdapter verwenden, um den Spinner aufzufüllen. Wenn ein Element ausgewählt ist, rufen Sie einfach das Element vom Adapter ab und speichern Sie die gewünschten Daten.

Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<MyObject> adapter = ... // initialize the adapter
adapter.setDropDownViewResource(Android.R.layout.some_view);
spinner.setAdapter(adapter);

und wenn ein Element ausgewählt ist 

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    MyObject selected = parent.getItemAtPosition(pos);
    // save any data relevant with selected item   
}

Wenn Sie Ihre Daten in db speichern, können Sie CursorAdapter und in onItemSelected verwenden, um die ausgewählte Element-ID vom Cursor abzurufen.

19
Mojo Risin

Erstellen Sie eine Klasse StringWithTag und verwenden Sie stattdessen den Namen der Zeichenfolge in der Liste: -

public class StringWithTag {
    public String string;
    public Object tag;

    public StringWithTag(String stringPart, Object tagPart) {
        string = stringPart;
        tag = tagPart;
    }

    @Override
    public String toString() {
        return string;
    }
}

in dem Artikel zum Spinnerteil hinzufügen: -

List<StringWithTag> list = new ArrayList<StringWithTag>();
list.add(new StringWithTag("Oldman", "12345"));
list.add(new StringWithTag("Umpire", "987654"));
list.add(new StringWithTag("Squad", "ABCDEE"));
ArrayAdapter<StringWithTag> adap = new ArrayAdapter<StringWithTag> (this, Android.R.layout.simple_spinner_item, list);
....
....

im Zuhörer: -

public void onItemSelected(AdapterView<?> parant, View v, int pos, long id) {
    StringWithTag s = (StringWithTag) parant.getItemAtPosition(pos);
    Object tag = s.tag;
}

voila! }

35
mfc

Ich glaube nicht, dass Sie Elementen einer Textarray-Ressource eine beliebige ID hinzufügen können, wenn Sie dies verwenden.

Ich denke, der einfachste Weg, eine solche ID anzuhängen, wäre entweder fester Code (wenn Sie eine statische Textressource verwenden) oder dynamisch (wenn Sie die Strings zur Laufzeit erhalten) eine Zuordnung von (String-Position im Array). > (Primärschlüssel).

BEARBEITEN: Auf der anderen Seite hat Mojo Risin einen Punkt - Sie sollten prüfen, ob die CursorAdapter-API bereits das tut, was Sie für Sie benötigen.

0
Cephron

Andrew Hi, es ist lange her, aber es lohnt sich zu schreiben.

Sie können für jede Zeile ein Tag festlegen, wenn Sie spinnerLayout in SpinnerAdapter aufpumpen:

spinnerView = inflater.inflate(spinnerLayout, parent, false);
spinnerView.setTag("Your Tag");

Und dann kannst du den Tag bekommen mit:

yourSpinner.getSelectedView().getTag();
0
Arash