في معظم الأحيان، يكون إعادة ترتيب التسلسل الهرمي للإعدادات نسبيًا
سهلًا ويتكون عادةً من نقل الإعدادات المفضّلة ذات الصلة وملف PreferenceController
إلى ملف XML مختلف. إذا كان PreferenceController
يستخدم use(...)
، احرص على إزالة
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>
نقل إعداد مفضّل يستخدم use(...)
راجِع المثال التالي الأكثر تعقيدًا الذي ينقل كل الإعدادات المفضّلة
في المقتطف "تحذير بشأن البيانات وحدّها" إلى مستوى أعلى في المقتطف "استخدام البيانات"، ما يؤدي إلى تعديل 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. في هذه الحالة، تشير قيمة ملف الضبط للتراكب إلى النشاط القديم، والذي يجب تعديله للإشارة إلى النشاط الصحيح.
إضافة شاشة إعدادات مفضّلة إلى التسلسل الهرمي
لإضافة شاشة إعدادات مفضّلة جديدة إلى التسلسل الهرمي، يُرجى الاطّلاع على إضافة إعدادات السيارة.
بعد إنشاء شاشة الإعدادات المفضّلة الجديدة، استخدِم الأمثلة أعلاه لإعادة ترتيب التسلسل الهرمي للإعدادات المفضّلة على النحو المطلوب.