افزودن اسپینر به برنامه

اسپینرها راهی سریع برای انتخاب یک مقدار از یک مجموعه ارائه می‌دهند. در حالت پیش‌فرض، یک اسپینر مقدار انتخاب‌شده فعلی خود را نشان می‌دهد. با تک‌ضرب زدن روی اسپینر، منویی نمایش داده می‌شود که همه مقادیر دیگری را که کاربر می‌تواند انتخاب کند نشان می‌دهد.

شکل ۱. منویی از یک اسپینر که مقادیر دردسترس را نشان می‌دهد.

می‌توانید با شیء Spinner یک اسپینر به چیدمان خود اضافه کنید، که معمولاً این کار را در چیدمان XML خود با عنصر <Spinner> انجام می‌دهید. این موضوع در مثال زیر نشان داده شده است:

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

برای پر کردن اسپینر با فهرستی از گزینه‌ها، یک SpinnerAdapter در کد منبع Activity یا Fragment خود مشخص کنید.

اگر از «مؤلفه‌های طراحی مواد» استفاده می‌کنید، منوهای کرکره‌ای نمایان معادل Spinner هستند.

پر کردن اسپینر با انتخاب‌های کاربر

گزینه‌هایی که برای اسپینر ارائه می‌دهید می‌تواند از هر منبعی باشد، اما باید آن‌ها را ازطریق SpinnerAdapter ارائه دهید، مثلاً ArrayAdapter اگر گزینه‌ها در آرایه دردسترس باشند یا CursorAdapter اگر گزینه‌ها از پُرسمان پایگاه داده دردسترس باشند.

برای مثال، اگر انتخاب‌های دردسترس برای اسپینر شما ازپیش تعیین شده است، می‌توانید آن‌ها را با آرایه رشته‌ای تعریف‌شده در فایل منبع رشته‌ای ارائه دهید:

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

با آرایه‌ای مانند این، می‌توانید از کد زیر در Activity یا Fragment خود استفاده کنید تا بااستفاده از نمونه‌ای از ArrayAdapter، آرایه را به چرخاننده ارائه دهید:

کاتلین

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
}

جاوا

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

روش createFromResource() به شما امکان می‌دهد ArrayAdapter را از آرایه رشته‌ای ایجاد کنید. آرگومان سوم برای این روش، منبع چیدمانی است که نحوه نمایش انتخاب برگزیده را در کنترل چرخان تعریف می‌کند. این پلاتفرم چیدمان simple_spinner_item را ارائه می‌دهد. این چیدمان پیش‌فرض است، مگراینکه بخواهید چیدمان خودتان را برای ظاهر اسپینر تعریف کنید.

‫setDropDownViewResource(int) را فراخوانی کنید تا چیدمانی را که آداپتور برای نمایش فهرست گزینه‌های اسپینر استفاده می‌کند مشخص کنید. simple_spinner_dropdown_item چیدمان استاندارد دیگری است که پلاتفرم تعریف کرده است.

برای اعمال آداپتور به Spinner، setAdapter() را فراخوانی کنید.

پاسخ به انتخاب‌های کاربر

وقتی کاربر موردی را از منوِ اسپینر انتخاب می‌کند، شیء Spinner رویداد on-item-selected را دریافت می‌کند.

برای تعریف کردن گرداننده رویداد انتخاب برای اسپینر، میانای AdapterView.OnItemSelectedListener و روش فراخوانی برگشتی onItemSelected() مربوطه را پیاده‌سازی کنید. برای مثال، در اینجا پیاده‌سازی میانای Activity آورده شده است:

کاتلین

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

جاوا

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

میانای AdapterView.OnItemSelectedListener به روش‌های فراخوانی برگشتی onItemSelected() و onNothingSelected() نیاز دارد.

با فراخوانی setOnItemSelectedListener()، پیاده‌سازی میانای را مشخص کنید:

کاتلین

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

جاوا

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

اگر میانای AdapterView.OnItemSelectedListener را با Activity یا Fragment خود پیاده‌سازی کنید، همان‌طور که در مثال قبلی نشان داده شده است، می‌توانید this را به‌عنوان نمونه میانجی ارسال کنید.