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