Atur Ulang Pengaturan Mobil

Untuk sebagian besar, mengatur ulang hierarki Pengaturan relatif mudah dan biasanya terdiri dari memindahkan preferensi dan PreferenceController yang relevan ke file XML yang berbeda. Jika PreferenceController menggunakan use(...) , pastikan untuk menghapusnya dari SettingsFragment sebelumnya dan menambahkannya ke SettingsFragment baru.

Halaman ini memberikan contoh penyusunan ulang Pengaturan untuk meninjau situasi yang mungkin terjadi.

Pindahkan preferensi dasar

Contoh ini menjelaskan cara memindahkan preferensi dari satu layar preferensi ke layar preferensi lainnya, yang mana preferensi tersebut hanya memiliki pengontrol preferensi default. Dalam contoh ini, Anda memindahkan preferensi Unit dari layar preferensi Beranda ke layar preferensi Sistem. Untuk melakukannya, pindahkan XML berikut dari homepage_fragment.xml ke lokasi yang sesuai di 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>

Pindahkan preferensi yang menggunakan use(...)

Pertimbangkan contoh yang lebih kompleks berikut ini yang memindahkan semua preferensi dalam fragmen Data Warning & Limit naik satu tingkat ke dalam fragmen Penggunaan Data, yang memperbarui DataWarningAndLimitFragment.java untuk menyertakan metode use untuk meneruskan informasi ke pengontrol preferensi setelah konstruksi.

  1. Pindahkan XML yang relevan ke lokasi yang diinginkan di 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. Di DataWarningAndLimitFragment.java , tentukan bagaimana metode use digunakan.
    @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);
        }
    }
    

    Dalam hal ini, metode use menetapkan editor kebijakan jaringan dan templat jaringan untuk pengontrol preferensi. Karena contoh ini memindahkan semua preferensi dan semua kode dalam metode onAttach relevan dengan pengaturan parameter preferensi ini, maka akan lebih tepat untuk menyalin seluruh konten metode ke dalam fragmen baru. Namun, hal ini bervariasi tergantung pada preferensi spesifik. Anda juga perlu memindahkan variabel instan yang relevan.

    Namun, ada komplikasinya. Fragmen asli diharapkan NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE diteruskan sebagai argumen, yang harus berasal dari maksud ke aktivitas (bila disediakan).

    Untuk mendapatkan informasi yang diperlukan ini, buatlah metode newInstance dan teruskan templat saat ada (jika tidak, teruskan null) lalu perbarui aktivitas untuk DataUsageFragment atau dapatkan informasi maksud secara langsung dalam metode onAttach dengan menggunakan getActivity().getIntent() . Apa pun kasusnya, Anda dapat menyampaikan informasi yang diperlukan untuk metode ini seperti yang Anda lakukan di atas.

  3. Identifikasi dependensi lain atau tindakan maksud yang diharapkan dalam fragmen lama sebelum membersihkan fragmen dan file XML lama. Dalam hal ini, nilai konfigurasi overlay menunjuk ke aktivitas lama, yang harus diperbarui agar mengarah ke aktivitas yang benar.

Tambahkan layar preferensi ke hierarki

Untuk menambahkan layar preferensi baru ke hierarki, lihat Tambahkan Pengaturan Mobil .

Setelah membuat layar preferensi baru, gunakan contoh di atas untuk mengatur ulang hierarki preferensi sesuai keinginan.