Mengatur Ulang Setelan Mobil

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

Halaman ini memberikan contoh untuk menyusun ulang Setelan guna meninjau situasi yang mungkin terjadi.

Memindahkan preferensi dasar

Contoh ini menjelaskan cara memindahkan preferensi dari satu layar preferensi ke layar preferensi lainnya, di mana preferensi hanya memiliki pengontrol preferensi {i>default<i}. Dalam contoh ini, Anda pindahkan preferensi Unit dari layar preferensi Halaman beranda ke Preferensi sistem layar. 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>

Memindahkan preferensi yang menggunakan penggunaan(...)

Pertimbangkan contoh lebih kompleks berikut yang memindahkan semua preferensi dalam Data Peringatan & Batasi fragmen ke atas 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 cara use metode apa pun yang 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 template jaringan untuk pengontrol preferensi. Karena contoh ini memindahkan semua preferensi dan semua kode dalam metode onAttach relevan dengan mengatur parameter preferensi ini, akan lebih tepat untuk menyalin seluruh ke fragmen baru. Namun, ini bervariasi bergantung pada preferensi tertentu. Anda juga harus memindahkan variabel instance yang relevan.

    Akan tetapi, ada komplikasi. Fragmen asli yang diharapkan NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE menjadi diteruskan sebagai argumen, yang harus masuk dari intent ke aktivitas (jika disediakan).

    Untuk mendapatkan informasi yang diperlukan ini, buat newInstance dan teruskan template jika ada (jika tidak, teruskan null) lalu mengupdate aktivitas untuk DataUsageFragment atau mendapatkan intent informasi secara langsung di metode onAttach dengan menggunakan getActivity().getIntent(). Dalam kedua kasus tersebut, Anda bisa meneruskan membutuhkan informasi untuk metode ini seperti yang Anda lakukan di atas.

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

Menambahkan layar preferensi ke hierarki

Untuk menambahkan layar preferensi baru ke hierarki, lihat Menambahkan Setelan Mobil.

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