إضافة أدوات دورانية إلى تطبيقك

توفر الدوّارات طريقة سريعة لاختيار قيمة واحدة من مجموعة. في الحالة الافتراضية، يعرض المؤشر الدوّار قيمته المحددة حاليًا. يؤدي النقر على مؤشر سريان العمل إلى عرض قائمة توضح جميع القيم الأخرى التي يمكن للمستخدم تحديدها.

الشكل 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:

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

تتيح لك الطريقة createFromResource() إنشاء ArrayAdapter من صفيف السلسلة. الوسيطة الثالثة لهذه الطريقة هي مورد تنسيق يحدد كيفية ظهور الخيار المحدد في عنصر التحكم الدوّار. توفّر المنصة simple_spinner_item التنسيق. هذا هو التخطيط الافتراضي إلا إذا كنت تريد تحديد التخطيط الخاص بك لمظهر مؤشر سريان العمل.

استدعاء setDropDownViewResource(int) لتحديد التنسيق الذي يستخدمه المحوِّل لعرض قائمة خيارات الدوران. simple_spinner_dropdown_item هو تنسيق عادي آخر تحدّده المنصة.

يمكنك الاتصال بـ setAdapter() لتطبيق المحوِّل على "Spinner".

الردّ على اختيارات المستخدمين

عندما يختار المستخدم عنصرًا من قائمة مؤشر الماوس، يتلقى الكائن Spinner حدثًا من اختيار العنصر.

لتحديد معالِج حدث الاختيار للمؤشر الدوّار، نفِّذ واجهة AdapterView.OnItemSelectedListener وطريقة معاودة الاتصال onItemSelected() المقابلة. على سبيل المثال، في ما يلي طريقة تنفيذ الواجهة في 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.
    }
}

تتطلّب واجهة AdapterView.OnItemSelectedListener طريقتَي onItemSelected() و onNothingSelected() لمعاودة الاتصال.

حدد تنفيذ الواجهة من خلال استدعاء 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);

إذا نفّذت الواجهة AdapterView.OnItemSelectedListener باستخدام Activity أو Fragment، كما في المثال السابق، يمكنك ضبط this كمثيل للواجهة.