Thêm vòng quay vào ứng dụng

Trình đơn vòng quay (spinner) giúp bạn dễ dàng chọn một giá trị trong một nhóm. Theo mặc định trạng thái, một vòng quay sẽ cho thấy giá trị hiện được chọn. Nhấn vào biểu tượng vòng quay sẽ hiển thị một trình đơn hiển thị tất cả các giá trị khác mà người dùng có thể chọn.

Hình 1. Trình đơn trong một vòng quay cho thấy những giá trị.

Bạn có thể thêm một vòng quay vào bố cục bằng Spinner mà bạn thường làm trong bố cục XML bằng cách sử dụng Phần tử <Spinner>. Thông tin này được thể hiện trong ví dụ:

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

Để điền danh sách các lựa chọn vào vòng quay, hãy chỉ định một SpinnerAdapter trong Activity hoặc Fragment mã nguồn.

Nếu bạn đang dùng Thành phần Material Design, hiển thị trình đơn thả xuống tương đương với Spinner.

Điền các lựa chọn của người dùng vào vòng quay

Các lựa chọn bạn cung cấp cho vòng quay có thể đến từ bất kỳ nguồn nào, nhưng bạn phải cung cấp thông qua SpinnerAdapter, chẳng hạn như ArrayAdapter nếu các lựa chọn có sẵn trong một mảng hoặc CursorAdapter nếu các lựa chọn có sẵn từ truy vấn cơ sở dữ liệu.

Ví dụ: nếu các lựa chọn có sẵn cho vòng quay của bạn được xác định trước, bạn có thể cung cấp cho chúng một mảng chuỗi được xác định trong tài nguyên chuỗi tệp:

<?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>

Với một mảng như thế này, bạn có thể sử dụng mã sau trong Activity hoặc Fragment để cung cấp vòng quay bằng cách sử dụng bản sao của 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);

Chiến lược phát hành đĩa đơn createFromResource() cho phép bạn tạo một ArrayAdapter từ mảng chuỗi. Chiến lược phát hành đĩa đơn Đối số thứ ba cho phương thức này là một tài nguyên bố cục xác định cách lựa chọn đã chọn sẽ xuất hiện trong điều khiển vòng quay. Nền tảng này cung cấp simple_spinner_item của bạn. Đây là bố cục mặc định, trừ phi bạn muốn xác định bố cục của riêng mình cho giao diện của vòng quay.

Gọi điện setDropDownViewResource(int) để chỉ định bố cục mà bộ chuyển đổi sử dụng để hiển thị danh sách các lựa chọn vòng quay. simple_spinner_dropdown_item là một bố cục chuẩn khác do nền tảng xác định.

Gọi điện setAdapter() để áp dụng trình chuyển đổi cho Spinner.

Phản hồi lựa chọn của người dùng

Khi người dùng chọn một mục từ trình đơn của vòng quay, Spinner đối tượng nhận được sự kiện đã chọn trên mặt hàng.

Để xác định trình xử lý sự kiện lựa chọn cho một vòng quay, hãy triển khai AdapterView.OnItemSelectedListener và giao diện tương ứng onItemSelected() phương thức gọi lại. Ví dụ: dưới đây là cách triển khai giao diện trong một 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.
    }
}

Chiến lược phát hành đĩa đơn Giao diện AdapterView.OnItemSelectedListener yêu cầu onItemSelected()onNothingSelected() phương thức gọi lại.

Chỉ định cách triển khai giao diện bằng cách gọi 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);

Nếu bạn triển khai AdapterView.OnItemSelectedListener với Activity hoặc Fragment của bạn, như trong ví dụ trước, bạn có thể truyền this làm thực thể giao diện.