การจัดลําดับชั้นการตั้งค่าใหม่นั้นค่อนข้างตรงไปตรงมา และมักจะเป็นการย้ายค่ากําหนดที่เกี่ยวข้องและ 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(...)
พิจารณาตัวอย่างที่ซับซ้อนมากขึ้นต่อไปนี้ซึ่งย้ายค่ากําหนดทั้งหมดในข้อมูลเตือนและจํากัดระดับสูงขึ้น 1 ระดับไปยังข้อมูลการใช้งานอินเทอร์เน็ต ซึ่งจะอัปเดต 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
เป็นอาร์กิวเมนต์ ซึ่งควรมาจาก Intent ไปยังกิจกรรม (หากมี)หากต้องการรับข้อมูลที่จําเป็นนี้ ให้สร้างเมธอด
newInstance
แล้วส่งเทมเพลตหากมี (หรือส่งค่า Null) จากนั้นอัปเดตกิจกรรมสําหรับDataUsageFragment
หรือรับข้อมูล Intent โดยตรงในเมธอดonAttach
โดยใช้getActivity().getIntent()
ไม่ว่าในกรณีใด คุณสามารถส่งข้อมูลที่จำเป็นสำหรับวิธีการนี้ได้ตามที่คุณทำด้านบน - ระบุการพึ่งพาอื่นๆ หรือการดำเนินการตาม Intent ที่คาดไว้ในส่วนที่เก่าก่อนที่จะล้างข้อมูลส่วนที่เป็นเศษและไฟล์ XML เก่า ในกรณีนี้ ค่าการกําหนดค่าการวางซ้อนจะชี้ไปยังกิจกรรมเดิม ซึ่งต้องอัปเดตให้ชี้ไปยังกิจกรรมที่ถูกต้อง
เพิ่มหน้าจอค่ากำหนดลงในลําดับชั้น
หากต้องการเพิ่มหน้าจอค่ากำหนดใหม่ลงในลําดับชั้น โปรดดูเพิ่มการตั้งค่ารถยนต์
หลังจากสร้างหน้าจอค่ากําหนดใหม่แล้ว ให้ใช้ตัวอย่างด้านบนเพื่อจัดลําดับลําดับชั้นของค่ากําหนดใหม่ตามต้องการ