Untuk sebagian besar, mengatur ulang hierarki Pengaturan relatif mudah dan biasanya terdiri dari memindahkan preferensi yang relevan dan PreferenceController
ke file XML yang berbeda. Jika PreferenceController
menggunakan use(...)
, pastikan untuk menghapusnya dari SettingsFragment
sebelumnya dan menambahkannya ke SettingsFragment
baru.
Artikel ini memberikan contoh untuk menyusun ulang Pengaturan untuk 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 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>
Memindahkan Preferensi yang Menggunakan use(...)
Pertimbangkan contoh yang lebih kompleks berikut 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.
- Pindahkan XML yang relevan ke lokasi yang diinginkan di
data_usage_fragment.xml
: l10n<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>
- Di
DataWarningAndLimitFragment.java
, tentukan bagaimana metodeuse
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 metodeonAttach
relevan untuk menyetel parameter preferensi ini, akan tepat untuk menyalin seluruh isi metode ke dalam fragmen baru. Namun, ini bervariasi tergantung pada preferensi spesifik. Anda juga perlu memindahkan variabel instan yang relevan.Namun, ada komplikasi. Fragmen asli mengharapkan
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
diteruskan sebagai argumen, yang harus masuk dari maksud ke aktivitas (bila disediakan).Untuk mendapatkan informasi yang diperlukan ini, buat metode
newInstance
dan teruskan template saat ada (jika tidak berikan null) lalu perbarui aktivitas untukDataUsageFragment
atau dapatkan informasi maksud secara langsung dalam metodeonAttach
dengan menggunakangetActivity().getIntent()
. Dalam kedua kasus, Anda dapat memberikan informasi yang diperlukan untuk metode ini seperti yang Anda lakukan di atas. - Identifikasi dependensi lain atau tindakan maksud yang diharapkan dalam fragmen lama sebelum membersihkan fragmen lama dan file XML. Dalam hal ini, nilai konfigurasi overlay menunjuk ke aktivitas lama, yang harus diperbarui untuk menunjuk ke aktivitas yang benar.
Menambahkan Layar Preferensi ke Hierarki
Untuk menambahkan layar preferensi baru ke hierarki, lihat Menambahkan Pengaturan Mobil .
Setelah membuat layar preferensi baru, gunakan contoh di atas untuk mengatur ulang hierarki preferensi sesuai keinginan.