بالنسبة للجزء الأكبر، تعد إعادة ترتيب التسلسل الهرمي للإعدادات أمرًا بسيطًا نسبيًا وتتكون عادةً من نقل التفضيل ذي الصلة ووحدة 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>
نقل تفضيل يستخدم 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
وتمرير القالب عندما يكون موجودًا (وإلا قم بتمريره بقيمة فارغة) ثم قم بتحديث النشاط لـDataUsageFragment
أو احصل على معلومات الهدف مباشرة في طريقةonAttach
باستخدامgetActivity().getIntent()
. في كلتا الحالتين، يمكنك تمرير المعلومات المطلوبة لهذه الطريقة كما فعلت أعلاه. - حدد أي تبعيات أخرى أو إجراءات نوايا متوقعة في الجزء القديم قبل تنظيف الأجزاء القديمة وملفات XML. في هذه الحالة، تشير قيمة تكوين التراكب إلى النشاط القديم، والذي يجب تحديثه للإشارة إلى النشاط الصحيح.
أضف شاشة التفضيلات إلى التسلسل الهرمي
لإضافة شاشة تفضيلات جديدة إلى التسلسل الهرمي، راجع إضافة إعدادات السيارة .
بعد إنشاء شاشة التفضيلات الجديدة، استخدم الأمثلة أعلاه لإعادة ترتيب التسلسل الهرمي للتفضيلات حسب الرغبة.