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

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

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

שקול את הדוגמה המורכבת יותר הבאה שמזיזה את כל ההעדפות במקטע Data Warning & Limit למעלה רמה אחת לתוך מקטע Data Usage, אשר מעדכן את 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 .
    @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 מגדירה את עורך מדיניות הרשת ואת תבנית הרשת עבור בקרי ההעדפות. מכיוון שדוגמה זו מעבירה את כל ההעדפות וכל הקוד בשיטת onAttach רלוונטי להגדרת פרמטרי העדפה אלו, יהיה זה מתאים להעתיק את כל תוכן השיטה לתוך הפרגמנט החדש. עם זאת, זה משתנה בהתאם להעדפה הספציפית. עליך לעבור גם על משתני המופע הרלוונטיים.

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

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

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

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

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

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