470 Stimmen

Ausgewähltes Element des Spinners programmatisch einstellen

Ich arbeite an einem Android-Projekt und ich 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 in der Liste programmatisch festlegen kann. Zum Beispiel, wenn ich in der Drehscheibe die folgenden Elemente habe:

  • Kategorie 1
  • Kategorie 2
  • Kategorie 3

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

1voto

Akshay Khajuria Punkte 103

Ja, Sie können dies erreichen, indem Sie den Index des gewünschten Spinner-Elements in der setSelection-Funktion von spinner übergeben. Zum Beispiel:

spinnerObject.setSelection(INDEX_OF_CATEGORY).

0voto

Juan Pablo Punkte 1175

In meinem Fall hat mir dieser Code den 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;
        }
    }
}

0voto

Sagar Chapagain Punkte 1608

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

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)
        }
    }
}

Usaage Beispiel

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
}

-1voto

JosinMC Punkte 1

Das hat bei mir funktioniert:

@Override
protected void onStart() {
    super.onStart();
    mySpinner.setSelection(position);
}

Es ist ähnlich wie die Lösung von @sberezin, aber der Aufruf von setSelection() in onStart().

-1voto

Vikhyat Chandra Punkte 33

Ich hatte das gleiche Problem seit gestern.leider das erste Element in der Array-Liste ist standardmäßig in Spinner Widget angezeigt.eine Umgehung wäre, um die vorherige ausgewählte Element mit jedem Element in der Array-Liste zu finden und tauschen ihre Position mit dem ersten Element.hier ist der Code.

OnResume()
{
int before_index = ShowLastSelectedElement();
if (isFound){
      Collections.swap(yourArrayList,before_index,0);
   }
adapter = new ArrayAdapter<String>(CurrentActivity.this,
                            android.R.layout.simple_spinner_item, yourArrayList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item;                    yourListView.setAdapter(adapter);
}
...
private int ShowLastSelectedElement() {
        String strName = "";
        int swap_index = 0;
        for (int i=0;i<societies.size();i++){
            strName = yourArrayList.get(i);
            if (strName.trim().toLowerCase().equals(lastselectedelement.trim().toLowerCase())){
                swap_index = i;
                isFound = true;
            }
        }
        return swap_index;
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X