סידור מחדש של הגדרות הרכב

ברוב המקרים, הסידור מחדש של היררכיית ההגדרות הוא יחסית ישיר ומורכב בדרך כלל מהעברת ההעדפה הרלוונטית PreferenceController לקובץ XML אחר. אם באפליקציה PreferenceController נעשה שימוש ב-use(...), חשוב להסיר אותו מה-SettingsFragment הקודם ומוסיפים אותו ל SettingsFragment.

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

העברת העדפה בסיסית

בדוגמה הזו מוסבר איך להעביר העדפה ממסך העדפה אחד לאחר, שבו להעדפה יש רק בקר ברירת מחדל שמוגדר כברירת מחדל. בדוגמה הזאת, להעביר את העדפת היחידות ממסך ההעדפות של דף הבית להעדפת המערכת מסך. כדי לעשות את זה, צריך להעביר את ה-XML הבא מ-homepage_fragment.xml אל המיקום המתאים ב-system_settings_fragment.xml:

<Preference
        android:icon="@drawable/ic_settings_units"
        android:key="@string/pk_units_settings_entry"
        android:title="@string/units_settings"
        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
        <intent android:targetPackage="com.android.car.settings"
            android:targetClass="com.android.car.settings.common.CarSettingActivities$UnitsSettingsActivity"/>
    </Preference>

העברת העדפה שמשתמשת ב-(...)

עיינו בדוגמה המורכבת יותר הבאה כדי להזיז את כל ההעדפות באזהרה לגבי נתונים להגביל את הפיצול ברמה אחת לקטע 'שימוש בנתונים', מעדכנים את DataWarningAndLimitFragment.java כך שיכללו את השיטה use כדי להעביר מידע לבקרי ההעדפות לאחר הבנייה.

  1. מעבירים את קובץ ה-XML הרלוונטי למיקום הרצוי ב-data_usage_fragment.xml:
    <Preference
            android:key="@string/pk_data_usage_cycle"
            android:title="@string/app_usage_cycle"
            settings:controller="com.android.car.settings.datausage.CycleResetDayOfMonthPickerPreferenceController"/>
        <com.android.car.settings.common.LogicalPreferenceGroup
            android:key="@string/pk_data_warning_group"
            settings:controller="com.android.car.settings.datausage.DataWarningPreferenceController">
            <SwitchPreference
                android:key="@string/pk_data_set_warning"
                android:title="@string/set_data_warning"/>
            <Preference
                android:key="@string/pk_data_warning"
                android:title="@string/data_warning"/>
        </com.android.car.settings.common.LogicalPreferenceGroup>
        <com.android.car.settings.common.LogicalPreferenceGroup
            android:key="@string/pk_data_limit_group"
            settings:controller="com.android.car.settings.datausage.DataLimitPreferenceController">
            <SwitchPreference
                android:key="@string/pk_data_set_limit"
                android:title="@string/set_data_limit"/>
            <Preference
                android:key="@string/pk_data_limit"
                android:title="@string/data_limit"/>
        </com.android.car.settings.common.LogicalPreferenceGroup>
  2. ב-DataWarningAndLimitFragment.java, קובעים איך use נעשה שימוש ב-method.
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    
        mPolicyEditor = new NetworkPolicyEditor(NetworkPolicyManager.from(context));
        mNetworkTemplate = getArguments().getParcelable(
                NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE);
        if (mNetworkTemplate == null) {
            mTelephonyManager = context.getSystemService(TelephonyManager.class);
            mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
            mNetworkTemplate = DataUsageUtils.getMobileNetworkTemplate(mTelephonyManager,
                    DataUsageUtils.getDefaultSubscriptionId(mSubscriptionManager));
        }
    
        // Loads the current policies to the policy editor cache.
        mPolicyEditor.read();
    
        List<DataWarningAndLimitBasePreferenceController> preferenceControllers =
                Arrays.asList(
                       use(CycleResetDayOfMonthPickerPreferenceController.class,
                                R.string.pk_data_usage_cycle),
                       use(DataWarningPreferenceController.class, R.string.pk_data_warning_group),
                       use(DataLimitPreferenceController.class, R.string.pk_data_limit_group));
    
        for (DataWarningAndLimitBasePreferenceController preferenceController :
                preferenceControllers) {
            preferenceController.setNetworkPolicyEditor(mPolicyEditor);
            preferenceController.setNetworkTemplate(mNetworkTemplate);
        }
    }

    במקרה הזה, השיטה use מגדירה את עורך מדיניות הרשת ותבנית הרשת לנאמני מידע. בגלל שהדוגמה הזו מעבירה את כל ההעדפות וכל הקוד ב-method onAttach רלוונטיים ל- כשמגדירים את הפרמטרים של ההעדפות, אפשר להעתיק את כל למקטע החדש. עם זאת, הערך הזה משתנה בהתאם העדפה ספציפית. בנוסף, תצטרכו להעביר מעל המשתנים הרלוונטיים של המכונה.

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

    כדי לקבל את המידע הנדרש הזה, אפשר ליצור newInstance method ומעבירה את התבנית בתבנית כאשר היא קיימת (לחלופין, להעביר ב-null) ולאחר מכן עדכון הפעילות עבור DataUsageFragment או קבלת הכוונה מידע ישירות בשיטה onAttach באמצעות getActivity().getIntent() בכל מקרה, ניתן להעביר את נדרש מידע לשיטה הזו, כפי שעשית למעלה.

  3. צריך לזהות יחסי תלות אחרים או פעולות Intent צפויות בקטע הישן לפני כן לנקות את המקטעים הישנים ואת קובצי ה-XML. במקרה הזה, שכבת-על config value מצביע על הפעילות הישנה, שחייבת לעדכן כדי שיצביע על את הפעילות הנכונה.

הוספת מסך העדפות להיררכיה

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

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