ארגון ההגדרות חלק מ-Android Jetpack.

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

קטגוריות של העדפות

אם יש לכם כמה Preference אובייקטים על ענן אפשר לקבץ אותם באמצעות PreferenceCategory א' PreferenceCategory מציג כותרת קטגוריה ומפריד מבחינה חזותית בקטגוריה שלכם.

כדי להגדיר PreferenceCategory ב-XML, צריך להקיף את התגים Preference ב- PreferenceCategory, באופן הבא:

<PreferenceScreen
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <PreferenceCategory
        app:key="notifications_category"
        app:title="Notifications">

        <SwitchPreferenceCompat
            app:key="notifications"
            app:title="Enable message notifications"/>

    </PreferenceCategory>

    <PreferenceCategory
        app:key="help_category"
        app:title="Help">

        <Preference
            app:key="feedback"
            app:summary="Report technical issues or suggest new features"
            app:title="Send feedback"/>

    </PreferenceCategory>

</PreferenceScreen>

התוצאה נראית כך:

תמונה שמראה העדפות עם קטגוריות
איור 1. העדפות בתוך קטגוריות.

פיצול ההיררכיה לכמה מסכים

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

באיור 2 מוצגת היררכיה פשוטה שכוללת שתי קטגוריות: הודעות ו סנכרון.

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

איור 3 מציג את אותה קבוצת העדפות שמפוצלת למספר מסכים:

תמונה שמציגה היררכיה שמפוצלת לכמה מסכים
איור 3. היררכיה מחולקת למספר מסכים.

כדי לקשר מסכים אל Preference, אפשר להצהיר על app:fragment ב-XML או אפשר להשתמש Preference.setFragment(). הפעלת שם החבילה המלא של PreferenceFragmentCompat כאשר הקשה על Preference, כמו שמוצג בדוגמה הבאה:

<Preference
        app:fragment="com.example.SyncFragment"
        .../>

כשמשתמש מקיש על Preference עם Fragment משויך, הממשק אמצעי תשלום אחד PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment() נקראת. בשיטה הזו אתם מטפלים בהצגת המסך החדש, המסך מוטמע בסביבה Activity.

הטמעה אופיינית נראית כך:

Kotlin

class MyActivity : AppCompatActivity(),
    PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
    ...
    override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean {
        // Instantiate the new Fragment.
        val args = pref.extras
        val fragment = supportFragmentManager.fragmentFactory.instantiate(
                classLoader,
                pref.fragment)
        fragment.arguments = args
        fragment.setTargetFragment(caller, 0)
        // Replace the existing Fragment with the new Fragment.
        supportFragmentManager.beginTransaction()
                .replace(R.id.settings_container, fragment)
                .addToBackStack(null)
                .commit()
        return true
    }
}

Java

public class MyActivity extends AppCompatActivity implements
        PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
    ...
    @Override
    public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) {
        // Instantiate the new Fragment.
        final Bundle args = pref.getExtras();
        final Fragment fragment = getSupportFragmentManager().getFragmentFactory().instantiate(
                getClassLoader(),
                pref.getFragment());
        fragment.setArguments(args);
        fragment.setTargetFragment(caller, 0);
        // Replace the existing Fragment with the new Fragment.
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.settings_container, fragment)
                .addToBackStack(null)
                .commit();
        return true;
    }
}

מסכי העדפות

הצהרה על היררכיות מקוננות באותו משאב XML באמצעות רכיב מקונן אין יותר תמיכה ב-&lt;PreferenceScreen&gt;. שימוש באובייקטים מקוננים מסוג Fragment במקום זאת.

להשתמש בפעילויות נפרדות

לחלופין, אם עליך לבצע התאמה אישית רבה של כל מסך, או אם ברצונך שהתצוגה תהיה מלאה Activity מעברים בין מסכים, אפשר להשתמש ב-Activity נפרד עבור בכל PreferenceFragmentCompat. כך אפשר להתאים אישית את כל החלקים Activity ומסך ההגדרות התואם שלו. ברוב האפליקציות, לא מומלץ כאן; במקום זאת, צריך להשתמש ב-Fragments כפי שתיארנו קודם.

למידע נוסף על השקת Activity מ-Preference: פעולות של העדפה.