จัดเรียงการตั้งค่ารถใหม่

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

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

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

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

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

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