در بیشتر موارد، تنظیم مجدد سلسله مراتب تنظیمات نسبتاً ساده است و معمولاً شامل انتقال اولویت و 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، وابستگیهای دیگر یا اقدامات هدف مورد انتظار در قطعه قدیمی را شناسایی کنید. در این مورد، یک مقدار پیکربندی همپوشانی به اکتیویتی قدیمی اشاره میکند، که باید بهروزرسانی شود تا به فعالیت صحیح اشاره کند.
یک صفحه ترجیحی به سلسله مراتب اضافه کنید
برای افزودن یک صفحه ترجیحی جدید به سلسله مراتب، به افزودن تنظیمات خودرو مراجعه کنید.
پس از ایجاد صفحه اولویت جدید، از مثال های بالا استفاده کنید تا سلسله مراتب اولویت ها را به دلخواه مرتب کنید.