در بیشتر موارد، تنظیم مجدد سلسله مراتب تنظیمات نسبتاً ساده است و معمولاً شامل انتقال اولویت و 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(...) استفاده می کند
مثال پیچیدهتر زیر را در نظر بگیرید که تمام تنظیمات برگزیده در قطعه 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
ایجاد کنید و در صورت وجود آن را در قالب ارسال کنید (در غیر این صورت به صورت تهی ارسال کنید) و سپس اکتیویتی را برایDataUsageFragment
به روز کنید یا با استفاده ازgetActivity().getIntent()
اطلاعات intent را مستقیماً در متدonAttach
دریافت کنید.getActivity().getIntent()
. در هر صورت، میتوانید اطلاعات مورد نیاز برای این روش را همانطور که در بالا انجام دادید، وارد کنید. - قبل از پاکسازی قطعات قدیمی و فایلهای XML، وابستگیهای دیگر یا اقدامات هدف مورد انتظار در قطعه قدیمی را شناسایی کنید. در این مورد، یک مقدار پیکربندی همپوشانی به اکتیویتی قدیمی اشاره میکند، که باید بهروزرسانی شود تا به فعالیت صحیح اشاره کند.
یک صفحه ترجیحی به سلسله مراتب اضافه کنید
برای افزودن یک صفحه ترجیحی جدید به سلسله مراتب، به افزودن تنظیمات خودرو مراجعه کنید.
پس از ایجاد صفحه اولویت جدید، از مثال های بالا استفاده کنید تا سلسله مراتب اولویت ها را به دلخواه مرتب کنید.