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

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

  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 เป็นอาร์กิวเมนต์ ซึ่งควรมาจาก Intent ไปยังกิจกรรม (หากมี)

    หากต้องการรับข้อมูลที่จําเป็นนี้ ให้สร้างเมธอด newInstance แล้วส่งเทมเพลตหากมี (หรือส่งค่า Null) จากนั้นอัปเดตกิจกรรมสําหรับ DataUsageFragment หรือรับข้อมูล Intent โดยตรงในเมธอด onAttach โดยใช้ getActivity().getIntent() ไม่ว่าในกรณีใด คุณสามารถส่งข้อมูลที่จำเป็นสำหรับวิธีการนี้ได้ตามที่คุณทำด้านบน

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

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

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

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