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. Ở trạng thái mặc định, vòng quay cho thấy giá trị đang được chọn. Khi nhấn vào vòng quay, một trình đơn sẽ cho thấy tất cả các giá trị khác mà người dùng có thể chọn.

Hình 1. Một trình đơn trong một danh sách, cho thấy các giá trị có sẵn.

Bạn có thể thêm một danh sách vào bố cục bằng đối tượng Spinner. Bạn thường thực hiện việc này trong bố cục XML với phần tử <Spinner>. Điều này được thể hiện trong ví dụ sau:

<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 trình đơn vòng quay, hãy chỉ định SpinnerAdapter trong mã nguồn Activity hoặc Fragment.

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

Điền các lựa chọn của người dùng vào danh sách màu sắc

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

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

<?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 danh sách màu sắc cho mảng bằng cách sử dụng một thực thể 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);

Phương thức createFromResource() cho phép bạn tạo ArrayAdapter từ mảng chuỗi. Đố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 xuất hiện trong bảng điều khiển danh sách. Nền tảng này cung cấp bố cục simple_spinner_item. Đây là bố cục mặc định trừ khi bạn muốn xác định bố cục riêng cho giao diện của danh sách màu sắc.

Gọi setDropDownViewResource(int) để chỉ định bố cục mà trình chuyển đổi sử dụng để hiển thị danh sách các lựa chọn trong trình đơ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 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 trên trình đơn của danh sách màu sắc, đối tượng Spinner sẽ nhận được một sự kiện tại mục đã chọn.

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

Giao diện AdapterView.OnItemSelectedListener yêu cầu phương thức gọi lại onItemSelected()onNothingSelected().

Chỉ định việc 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 triển khai giao diện AdapterView.OnItemSelectedListener bằng Activity hoặc Fragment, như trong ví dụ trước, bạn có thể truyền this dưới dạng thực thể giao diện.