לרוב, סידור מחדש של היררכיית ההגדרות הוא פשוט יחסית ומורכב בדרך כלל מהעברה של ההעדפה הרלוונטית ושל 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
להעברת מידע לבקרי ההעדפות לאחר הבנייה.
- העבר את ה-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
.@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()
. בכל מקרה, אתה יכול להעביר את המידע הדרוש לשיטה זו כפי שעשית למעלה. - זהה כל תלות אחרת או פעולות כוונה צפויות בפרגמנט הישן לפני ניקוי הפרגמנטים הישנים וקובצי ה-XML. במקרה זה, ערך תצורת שכבת-על מצביע על הפעילות הישנה, אותה יש לעדכן כדי להצביע על הפעילות הנכונה.
הוסף מסך העדפות להיררכיה
כדי להוסיף מסך העדפות חדש להיררכיה, ראה הוספת הגדרות רכב .
לאחר יצירת מסך ההעדפות החדש, השתמש בדוגמאות שלמעלה כדי לסדר מחדש את היררכיית ההעדפות כרצונך.