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