Dodaj wskaźnik postępu do aplikacji

Wskaźniki sprawności pozwalają szybko wybrać jedną wartość z zestawu. W stanie domyślnym wskaźnik postępu pokazuje obecnie wybraną wartość. Dotknięcie wskaźnika postępu wyświetli menu ze wszystkimi pozostałymi wartościami, które może wybrać użytkownik.

Rysunek 1. Menu z dostępnymi wartościami.

Za pomocą obiektu Spinner możesz dodać wskaźnik postępu do układu, co zwykle robi się w układzie XML z elementem <Spinner>. Widać to w tym przykładzie:

<Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

Aby wstawić listę opcji do wyboru, podaj SpinnerAdapter w kodzie źródłowym Activity lub Fragment.

Jeśli używasz komponentów Material Design, wyświetlone menu jest odpowiednikiem elementu Spinner.

Wypełnij wskaźnik postępu opcjami użytkownika

Opcje, które podajesz we wskaźniku ładowania, mogą pochodzić z dowolnego źródła, ale musisz je podać za pomocą obiektu SpinnerAdapter, na przykład ArrayAdapter, jeśli opcje są dostępne w tablicy, lub CursorAdapter, jeśli opcje są dostępne w zapytaniu bazy danych.

Jeśli na przykład dostępne opcje dotyczące spinnera są już określone, możesz podać im tablicę z ciągami znaków zdefiniowaną w pliku zasobów z ciągiem:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
        <item>Jupiter</item>
        <item>Saturn</item>
        <item>Uranus</item>
        <item>Neptune</item>
    </string-array>
</resources>

W przypadku takiej tablicy możesz użyć podanego niżej kodu w Activity lub Fragment, aby dostarczyć do spinnera tablicę za pomocą wystąpienia ArrayAdapter:

Kotlin

val spinner: Spinner = findViewById(R.id.planets_spinner)
// Create an ArrayAdapter using the string array and a default spinner layout.
ArrayAdapter.createFromResource(
        this,
        R.array.planets_array,
        android.R.layout.simple_spinner_item
).also { adapter ->
    // Specify the layout to use when the list of choices appears.
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    // Apply the adapter to the spinner.
    spinner.adapter = adapter
}

Java

Spinner spinner = (Spinner) findViewById(R.id.planets_spinner);
// Create an ArrayAdapter using the string array and a default spinner layout.
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        this,
        R.array.planets_array,
        android.R.layout.simple_spinner_item
);
// Specify the layout to use when the list of choices appears.
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner.
spinner.setAdapter(adapter);

Metoda createFromResource() umożliwia utworzenie ArrayAdapter z tablicy ciągów tekstowych. Trzecim argumentem tej metody jest zasób układu, który określa sposób wyświetlania wybranej opcji w elemencie sterującym kursorem. Platforma udostępnia układ simple_spinner_item. Jest to układ domyślny, chyba że chcesz zdefiniować własny układ dla wyglądu spinacza.

Wywołaj setDropDownViewResource(int), aby określić układ, którego adapter ma używać do wyświetlania listy opcji ładowania. simple_spinner_dropdown_item to kolejny układ standardowy zdefiniowany przez platformę.

Zadzwoń pod numer setAdapter(), aby zastosować przejściówkę do urządzenia Spinner.

Odpowiadanie na wybory użytkowników

Gdy użytkownik wybierze element z menu spinacza, obiekt Spinner otrzyma zdarzenie on-item-selected.

Aby zdefiniować moduł obsługi zdarzeń wyboru dla spinnera, zaimplementuj interfejs AdapterView.OnItemSelectedListener i odpowiednią metodę wywołania zwrotnego onItemSelected(). Oto implementacja interfejsu w Activity:

Kotlin

class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {
    ...
    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
        // An item is selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos).
    }

    override fun onNothingSelected(parent: AdapterView<*>) {
        // Another interface callback.
    }
}

Java

public class SpinnerActivity extends Activity implements OnItemSelectedListener {
    ...
    public void onItemSelected(AdapterView<?> parent, View view,
            int pos, long id) {
        // An item is selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos).
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback.
    }
}

Interfejs AdapterView.OnItemSelectedListener wymaga metod wywołania zwrotnego onItemSelected() i onNothingSelected().

Określ implementację interfejsu, wywołując metodę setOnItemSelectedListener():

Kotlin

val spinner: Spinner = findViewById(R.id.planets_spinner)
spinner.onItemSelectedListener = this

Java

Spinner spinner = (Spinner) findViewById(R.id.planets_spinner);
spinner.setOnItemSelectedListener(this);

Jeśli zaimplementujesz interfejs AdapterView.OnItemSelectedListener w interfejsie Activity lub Fragment, tak jak w poprzednim przykładzie, możesz przekazać this jako instancję interfejsu.