0
0
0
share
#Android#codepath#sharedpreference
0 Komentar
Membuat Halaman Settings di Android Menggunakan PreferenceFragment
Pendahuluan
Biasanya di aplikasi Android kita sering melihat halaman settings yang memiliki opsi untuk mengatur bagaimana suatu aplikasi bekerja. PreferenceFragment
dan PreferenceFragmentCompat
memiliki kumpulan hirarki dari kumpulan objek preference yang ditampilkan dalam bentuk list di layar. Preferences yang ditampilkan tadi dapat disimpan secara otomatis ke SharedPreferences.
Minimum API Level
Lollipop ke bawah: Cara yang paling disarankan untuk menangani halaman settings ialah menggunakan PreferenceFragment
yang mana mendukung API level 11 (Honeycomb) ke atas. Pembaca dapat menghindari PreferenceActivity
yang sudah memiliki banyak method deprecated. Ingat bahwa PreferenceFragment
tidak kompatibel dengan Android support v4. Alternatif lain:
- https://github.com/Machinarius/PreferenceFragment-Compat
- https://github.com/kolavar/android-support-v4-preferencefragment
Marshmallow ke atas: Library support v7 mengenalkan PreferenceFragmentCompat
. Kita akan menggunakannya di tutorial ini.
Atur Dependensi Gradle
Buka file app/build.gradle
dan tambahkan baris berikut ke blok dependensi:
dependencies {
// your other dependencies...
compile 'com.takisoft.fix:preference-v7:25.3.0.0'
}
Karena adanya bug saat menggunakan tema Material Design dengan Preference Fragment Compat, maka kita akan menggunakan library open source pihak ke tiga. Baca diskusinya di StackOverflow.
Buat File XML
Pertama, buat objek XML baru di res/xml
:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/title_first_section">
<CheckBoxPreference
android:key="checkbox_preference"
android:title="@string/title_checkbox_preference"
android:defaultValue="@string/default_checkbox_preference"/>
<EditTextPreference
android:key="edittext_preference"
android:title="@string/title_edittext_preference"
android:summary="@string/summary_edittext_preference"
android:dialogTitle="@string/dialog_title_edittext_preference"
android:dependency="checkbox_preference" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/title_second_section">
<ListPreference
android:key="list_preference"
android:title="@string/title_list_preference"
android:dialogTitle="@string/dialog_title_list_preference"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entryvalues_list_preference" />
<Preference
android:title="@string/title_intent_preference">
<intent android:action="android.intent.action.VIEW"
android:data="http://codepath.com/" />
</Preference>
</PreferenceCategory>
</PreferenceScreen>
Semua preferences disimpan sebagai pasangan key-value di SharedPreferences menggunakan key yang kita tentukan di atas (android:key
). Untuk mendapatkan objek preferences yang bisa mengambil value dari key di atas kita dapat menggunakan kode berikut:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(android.content.Context);
Elemen paling luar dari file XML ini harus berupa . Di dalam screen ini kita dapat melihat semua preferences atau preferences yang di kelompokkan di dalam . Preferences yang dikelompokkan akan tampil bersama di bawah sebuah section heading. Berikut hasil dari kode di atas:
Preference Types
Ada beberapa tiep preferences yang dipakai untuk settings:
- ListPreference: membuka sebuah dialog yang menampilkan daftar opsi; menyimpan data bertipe string
- EditTextPreference: membuka dialog dengan sebuah EditText untuk menerima masukan; menyimpan data bertipe string
- CheckBoxPreference: menggunakan checkbox untuk menyimpan data bertipe boolean (true saat dicentang, false saat centang dihilangkan)
- SwitchPreference (min API 14): menggunakan sebuah switch untuk menyimpan data bertipe boolean (true saat on, false saat off)
Dua tiep di atas (ListPreference
and EditTextPreference
) diturunkan dari DialogPreference
dan dapat menambahkan atribut yang berhubungan dengan dialogdi XML (e.g. a dialogTitle).
Menambah Opsi Untuk ListPreference
Saat membuat opsi untuk ListPreferences kita memerlukan dua array. Yang pertama di simpan di dalam android:entries
yang merupakan array berisi string untuk ditampilkan ke pengguna. Array yang kedua berisi nilai untuk masing-masing opsi tersebut yang disimpan di android:entryValues
(contoh array dapat dilihat di sini).
<ListPreference
android:key="list_preference"
android:title="@string/title_list_preference"
android:dialogTitle="@string/dialog_title_list_preference"
android:entries="@array/entries_list_preference"
android:entryValues="@array/entryvalues_list_preference" />
Intent di Preferences
Preferenes dapat menyimpan suatu intent yang bias digunakan untuk membuka activity baru atau melakukan aksi seputar intent lainnya. Tidak ada data yang disimpan di intent tersebut.
<Preference
android:title="@string/title_intent_preference">
<intent android:action="android.intent.action.VIEW"
android:data="http://codepath.com/" />
</Preference>
Implementasi Java
Gunakan PreferenceFragmentCompat
untuk menangani preferences lewat Java. Untuk membaca settings di dalam fragment, baca preferences di dalam methodonCreatePreferences(). Untuk mengambil objek preference, gunakan method getPreferenceManager().findPreference("key")
. Untuk mengubah-ubah isi settings menggunakan objek preference barusan, buat sebuah OnPreferenceChangeListener
.
public class SettingsFragment extends PreferenceFragmentCompat {
private ListPreference mListPreference;
...
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
// Indicate here the XML resource you created above that holds the preferences
setPreferencesFromResource(R.xml.settings, rootKey);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mListPreference = (ListPreference) getPreferenceManager().findPreference("preference_key");
mListPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// your code here
}
}
return inflater.inflate(R.layout.fragment_settings, container, false);
}
}
Custom Preferences
Jika contoh di atas tidak sesuai dengan kebutuhan yang pembaca cari, pembaca juga dapat membuat sebuah custom preference yang meng-extend dari DialogPreference
, TwoStatePreference
, atau Preference
.
Untuk panduan lengkap bagaimana membuat custom preference, kunjungi Android Developer: Settings API.
Diterjemahkan dari Settings with PreferenceFragmentEdit PagePage History
0
0
0
share