it-swarm.com.de

Stellen Sie das ausgewählte Element des Spinners programmgesteuert ein

Ich arbeite an einem Android-Projekt und verwende einen Spinner, der einen Array-Adapter verwendet, der aus der Datenbank ausgefüllt wird. 

Ich kann nicht herausfinden, wie ich das ausgewählte Element programmgesteuert aus der Liste einstellen kann. Wenn zum Beispiel im Spinner folgende Elemente vorhanden sind:

  • Kategorie 1
  • Kategorie 2
  • Kategorie 3

Wie würde ich die Kategorie 2 programmgesteuert zum ausgewählten Element machen, wenn der Bildschirm erstellt wird? Ich dachte, es könnte ähnlich sein wie c # I.E Spinner.SelectedText = "Category 2", aber es scheint keine ähnliche Methode für Android zu geben.

314
Boardy

Verwenden Sie Folgendes: spinnerObject.setSelection(INDEX_OF_CATEGORY2).

644
Arun George

Keine dieser Antworten gab mir die Lösung, arbeitete nur mit dieser:

mySpinner.post(new Runnable() {
    @Override
    public void run() {
        mySpinner.setSelection(position);
    }
});
66
Marco HC
public static void selectSpinnerItemByValue(Spinner spnr, long value) {
    SimpleCursorAdapter adapter = (SimpleCursorAdapter) spnr.getAdapter();
    for (int position = 0; position < adapter.getCount(); position++) {
        if(adapter.getItemId(position) == value) {
            spnr.setSelection(position);
            return;
        }
    }
}

Sie können die oben genannten verwenden:

selectSpinnerItemByValue(spinnerObject, desiredValue);

& natürlich kannst du auch gerne per index direkt auswählen

spinnerObject.setSelection(index);
31
Yaqub Ahmad

Einige Erklärungen (zumindest für Fragmente - niemals mit reiner Aktivität versucht). Hoffe, es hilft jemandem, Android besser zu verstehen.

Die beliebteste Antwort von Arun George ist richtig, funktioniert aber in manchen Fällen nicht. 
Die Antwort von Marco HC verwendet Runable, was aufgrund zusätzlicher CPU-Last ein letzter Ausweg ist. 

Die Antwort ist - Sie sollten einfach den richtigen Ort wählen, um setSelection () aufzurufen, zum Beispiel arbeitet für mich:

@Override
public void onResume() {
    super.onResume();

    yourSpinner.setSelection(pos);
 }

Aber es funktioniert nicht in onCreateView (). Ich vermute, das ist der Grund für das Interesse an diesem Thema. 

Das Geheimnis ist, dass Sie mit Android in keiner Methode etwas tun können, was Sie wollen - oops :( - Komponenten sind möglicherweise nicht fertig. Als ein anderes Beispiel können Sie ScrollView weder in onCreateView () noch in onResume scrollen () (siehe Antwort hier )

27
sberezin

Warum verwenden Sie Ihre Werte nicht aus der Datenbank, speichern sie in einer ArrayList und verwenden Sie einfach:

yourSpinner.setSelection(yourArrayList.indexOf("Category 1"));
11
RicardoSousaDev

So finden Sie einen Wert und wählen ihn aus:

private void selectValue(Spinner spinner, Object value) {
    for (int i = 0; i < spinner.getCount(); i++) {
        if (spinner.getItemAtPosition(i).equals(value)) {
            spinner.setSelection(i);
            break;
        }
    }
}
9
Ferran Maylinch

Sie können eine generische Methode für diese Art von Arbeit erstellen, wie ich es in meiner UtilityClass-Klasse mache

public void SetSpinnerSelection(Spinner spinner,String[] array,String text) {
    for(int i=0;i<array.length;i++) {
        if(array[i].equals(text)) {
            spinner.setSelection(i);
        }
    }
}
6
ZygoteInit

Ich habe einen SimpleCursorAdapter, also muss ich die Daten zur Verwendung der Antwort in diesem Beitrag duplizieren. Also empfehle ich, dass Sie es so versuchen:

for (int i = 0; i < spinnerRegion.getAdapter().getCount(); i++) {
    if (spinnerRegion.getItemIdAtPosition(i) == Integer
        .valueOf(signal.getInt(signal
            .getColumnIndexOrThrow("id_region")))) {
        spinnerRegion.setSelection(i);
        break;
    }
}

Ich denke, das ist ein echter Weg

3
pazfernando

die optimale Lösung ist: 

    public String[] items= new String[]{"item1","item2","item3"};
    // here you can use array or list 
    ArrayAdapter adapter= new ArrayAdapter(Your_Context, R.layout.support_simple_spinner_dropdown_item, items);
    final Spinner itemsSpinner= (Spinner) findViewById(R.id.itemSpinner);
itemsSpinner.setAdapter(adapter);

um die Position des Elements zu erhalten, fügen Sie automatisch die folgende Anweisung hinzu 

itemsSpinner.setSelection(itemsSpinner.getPosition("item2"));
3

Sie können dies einfach wie folgt festlegen: spinner.setSelection (1), statt 1 können Sie jede Position der Liste festlegen, die Sie anzeigen möchten.

2
user5495260

Das ist Arbeit für mich.

 spinner.setSelection(spinner_adapter.getPosition(selected_value)+1);
2
Arpit Patel

Wenn Sie eine Liste von Kontakten haben, können Sie dies tun:

((Spinner) view.findViewById(R.id.mobile)).setSelection(spinnerContactPersonDesignationAdapter.getPosition(schoolContact.get(i).getCONT_DESIGNATION()));
1
Maddy

In meinem Fall hat dieser Code meinen Tag gerettet:

public static void selectSpinnerItemByValue(Spinner spnr, long value) {
    SpinnerAdapter adapter = spnr.getAdapter();
    for (int position = 0; position < adapter.getCount(); position++) {
        if(adapter.getItemId(position) == value) {
            spnr.setSelection(position);
            return;
        }
    }
}
1
Juan Pablo

Ich weiß, dass das bereits beantwortet wurde, aber einfacher Code zum Auswählen eines Elements, sehr einfach:

spGenre.setSelection( ( (ArrayAdapter) spGenre.getAdapter()).getPosition(client.getGenre()) );
1
Dante
  for (int x = 0; x < spRaca.getAdapter().getCount(); x++) {
            if (spRaca.getItemIdAtPosition(x) == reprodutor.getId()) {
                spRaca.setSelection(x);
                break;
            }
        }
1

Das benutze ich in Kotlin:

spinner.setSelection(resources.getStringArray(R.array.choices).indexOf("Choice 1"))
0
Donny Rozendal

Ich hatte eine Erweiterungsfunktion von Spinner zum Laden von Daten und zum Verfolgen der Artikelauswahl erstellt.

Spinner.kt

fun <T> Spinner.load(context: Context, items: List<T>, item: T? = null) {
    adapter = ArrayAdapter(context, Android.R.layout.simple_spinner_item, items).apply {
        setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item)
    }

    if (item != null && items.isNotEmpty()) setSelection(items.indexOf(item))
}

inline fun Spinner.onItemSelected(
    crossinline itemSelected: (
        parent: AdapterView<*>,
        view: View,
        position: Int,
        id: Long
    ) -> Unit
) {
    onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
        override fun onNothingSelected(parent: AdapterView<*>?) {
        }

        override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
            itemSelected.invoke(parent, view, position, id)
        }
    }
}

Anwendungsbeispiel

val list = listOf("String 1", "String 2", "String 3")
val defaultData = "String 2"

// load data to spinner
your_spinner.load(context, list, defaultData)

// load data without default selection, it points to first item
your_spinner.load(context, list)

// for watching item selection
your_spinner.onItemSelected { parent, view, position, id -> 
    // do on item selection
}
0
Sagar Chapagain

Meistens funktioniert spinner.setSelection(i); //i is 0 to (size-1) of adapter's size Nicht. Wenn Sie einfach spinner.setSelection(i); anrufen

Das hängt von deiner Logik ab.

Wenn view vollständig geladen ist und Sie es von der Schnittstelle aus aufrufen möchten, schlage ich vor, Sie anzurufen 

spinner.setAdapter(spinner_no_of_hospitals.getAdapter());
spinner.setSelection(i); // i is 0 or within adapter size

Oder wenn Sie zwischen dem Aktivitäts-/Fragment-Lebenszyklus wechseln möchten, rufen Sie wie folgt an

spinner.post(new Runnable() {
  @Override public void run() {
    spinner.setSelection(i);
  }
});
0
Shan Xeeshi

Dies wird in Kommentaren an anderer Stelle auf dieser Seite angegeben, hielt es jedoch für sinnvoll, es in eine Antwort zu ziehen:

Bei Verwendung eines Adapters habe ich festgestellt, dass die spinnerObject.setSelection(INDEX_OF_CATEGORY2) auftreten muss after der Aufruf von setAdapter; Andernfalls ist das erste Element immer die erste Auswahl.

// spinner setup...
spinnerObject.setAdapter(myAdapter);
spinnerObject.setSelection(INDEX_OF_CATEGORY2);

Dies wird durch Überprüfen des AbsSpinner codes für setAdapter bestätigt.

0
Andy