اسپینرها را به برنامه خود اضافه کنید

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

شکل 1. منویی از یک اسپینر که مقادیر موجود را نشان می دهد.

می‌توانید با شی 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 یک رویداد انتخاب شده در مورد را دریافت می کند.

برای تعریف کنترل کننده رویداد انتخاب برای یک اسپینر، رابط 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 به عنوان نمونه رابط ارسال کنید.