Sebagian besar, mengatur ulang hierarki Setelan 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 untuk mengurutkan ulang Setelan guna meninjau situasi yang mungkin terjadi.
Memindahkan preferensi dasar
Contoh ini menjelaskan cara memindahkan preferensi dari satu layar preferensi ke layar lainnya,
dengan preferensi yang hanya memiliki pengontrol preferensi default. Dalam contoh ini, Anda
memindahkan preferensi Unit dari layar preferensi Halaman 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
di fragmen Peringatan & Batas Data ke atas satu tingkat ke 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
:<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 cara penggunaan metodeuse
.@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 menetapkan parameter preferensi ini, sebaiknya salin seluruh konten metode ke dalam fragmen baru. Namun, hal ini bervariasi bergantung pada preferensi tertentu. Anda juga harus memindahkan variabel instance yang relevan.Namun, ada masalahnya. Fragmen asli mengharapkan
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
diteruskan sebagai argumen, yang harus berasal dari intent ke aktivitas (jika disediakan).Untuk mendapatkan informasi yang diperlukan ini, buat metode
newInstance
dan teruskan template jika ada (jika tidak, teruskan null), lalu update aktivitas untukDataUsageFragment
atau dapatkan informasi intent secara langsung di metodeonAttach
menggunakangetActivity().getIntent()
. Dalam kedua kasus tersebut, Anda dapat meneruskan informasi yang diperlukan untuk metode ini seperti yang Anda lakukan di atas. - Identifikasi dependensi lain atau tindakan intent yang diharapkan di fragmen lama sebelum membersihkan fragmen lama dan file XML. Dalam hal ini, nilai konfigurasi overlay mengarah ke aktivitas lama, yang harus diperbarui 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 menyusun ulang hierarki preferensi sesuai keinginan.