הוספת ספינרים לאפליקציה

ספינר הם דרך מהירה לבחור ערך אחד מתוך קבוצה. כברירת המחדל המצב הנוכחי, סימן גרפי שמסמן את הערך הנוכחי שנבחר. הקשה על הסיבוב מציגה תפריט שמציג את כל הערכים האחרים שהמשתמש יכול לבחור.

איור 1. תפריט מסתחררת שמציגה את האפשרויות הזמינות ערכים.

אפשר להוסיף מסתובבת לפריסה באמצעות Spinner בדרך כלל בפריסת XML באמצעות רכיב <Spinner>. הערך הזה מוצג בקטעים הבאים דוגמה:

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

כדי לאכלס את המחוון ברשימה של אפשרויות, צריך לציין SpinnerAdapter ב- Activity או Fragment קוד המקור.

אם אתם משתמשים ברכיבים של Material Design, חשוף תפריטים נפתחים מקבילים ל-Spinner.

אכלוס הסרגל באפשרויות של המשתמש

האפשרויות שתספקו לסיבוב יכולה להגיע מכל מקור, אבל אתם חייב לספק אותם דרך SpinnerAdapter, כמו ArrayAdapter אם האפשרויות זמינות במערך או CursorAdapter אם האפשרויות זמינות מתוך שאילתה של מסד נתונים.

לדוגמה, אם האפשרויות הזמינות לספינר נקבעות מראש, אפשר לספק להם מערך מחרוזת שמוגדר משאב מחרוזות file:

<?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) מקבל אירוע שנבחר בפריט.

כדי להגדיר את ה-handler של אירועי הבחירה עבור סימן גרפי שפעולה מתבצעת, צריך להטמיע את 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 כמופע של הממשק.