ปรับการตั้งค่ารถใหม่

โดยส่วนใหญ่แล้ว การจัดเรียงลำดับชั้นของการตั้งค่าใหม่ค่อนข้าง ตรงไปตรงมาและมักประกอบด้วยการย้ายค่ากำหนดที่เกี่ยวข้อง 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 เพื่อส่งผ่านข้อมูลไปยังตัวควบคุมค่ากำหนดหลังการสร้าง

  1. ย้าย 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>
  2. ใน 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 กรณี คุณสามารถส่งใน ข้อมูลที่จำเป็นสำหรับวิธีการนี้ ตามที่คุณได้กล่าวไว้ข้างต้น

  3. ระบุทรัพยากร Dependency หรือการดำเนินการ Intent ที่คาดไว้ในส่วนเก่าก่อน ล้าง Fragment และไฟล์ XML เก่า ในกรณีนี้ การวางซ้อน config value จะชี้ไปที่กิจกรรมเดิม ซึ่งต้องอัปเดตให้ชี้ไปที่ กิจกรรมที่ถูกต้อง

เพิ่มหน้าจอค่ากำหนดในลำดับชั้น

หากต้องการเพิ่มหน้าจอค่ากำหนดใหม่ไปยังลำดับชั้น โปรดดูหัวข้อเพิ่มการตั้งค่ารถยนต์

หลังจากสร้างหน้าจอค่ากำหนดใหม่ ให้ใช้ตัวอย่างด้านบนเพื่อจัดเรียงพารามิเตอร์ ลำดับชั้นค่ากำหนดที่ต้องการ