ברוב המקרים, הסידור מחדש של היררכיית ההגדרות הוא יחסית
ישיר ומורכב בדרך כלל מהעברת ההעדפה הרלוונטית
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
כדי להעביר מידע לבקרי ההעדפות לאחר הבנייה.
- מעבירים את קובץ ה-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>
- ב-
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
מגדירה את עורך מדיניות הרשת ותבנית הרשת לנאמני מידע. בגלל שהדוגמה הזו מעבירה את כל ההעדפות וכל הקוד ב-methodonAttach
רלוונטיים ל- כשמגדירים את הפרמטרים של ההעדפות, אפשר להעתיק את כל למקטע החדש. עם זאת, הערך הזה משתנה בהתאם העדפה ספציפית. בנוסף, תצטרכו להעביר מעל המשתנים הרלוונטיים של המכונה.עם זאת, יש כאן סיבוך. המקטע המקורי היה צפוי
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
כדי להיות מועבר כארגומנט, שצריך להגיע מהכוונה לפעילות (אם צוין).כדי לקבל את המידע הנדרש הזה, אפשר ליצור
newInstance
method ומעבירה את התבנית בתבנית כאשר היא קיימת (לחלופין, להעביר ב-null) ולאחר מכן עדכון הפעילות עבורDataUsageFragment
או קבלת הכוונה מידע ישירות בשיטהonAttach
באמצעותgetActivity().getIntent()
בכל מקרה, ניתן להעביר את נדרש מידע לשיטה הזו, כפי שעשית למעלה. - צריך לזהות יחסי תלות אחרים או פעולות Intent צפויות בקטע הישן לפני כן לנקות את המקטעים הישנים ואת קובצי ה-XML. במקרה הזה, שכבת-על config value מצביע על הפעילות הישנה, שחייבת לעדכן כדי שיצביע על את הפעילות הנכונה.
הוספת מסך העדפות להיררכיה
כדי להוסיף מסך העדפות חדש להיררכיה, צריך לעיין במאמר הוספת הגדרות של רכב.
לאחר יצירת מסך ההעדפות החדש, אפשר להיעזר בדוגמאות שלמעלה כדי לשנות את הסדר היררכיית ההעדפות.