Saya menggunakan PreferenceActivity agar pengguna dapat menyetel beberapa nilai. Saya memberinya file xml dengan preferensi yang ditentukan.
Saya telah mengatur semua android:defaultValue=""
untuk mereka.
Ketika saya memulai aplikasi saya, saya memerlukan preferensi, atau jika mereka belum diatur secara manual, saya ingin nilai default:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false);
Namun, saat itu android:defaultValue="true"
saya masih mendapatkan false
. Jadi, sepertinya defaultValues yang disetel dalam XML tidak digunakan di mana pun kecuali saat menginisialisasi layar preferensi.
Saya tidak ingin melakukan hardcode nilai default dalam getBoolean()
metode ini. Jadi, apakah ada cara untuk mendapatkan nilai default dengan hanya mendefinisikan ini di 1 tempat?
sumber
onCreate()
dariApplication
.readAgain
ke benar tidak ada hubungannya dengan preferensi pengguna yang ditimpa. Dari Javadoc: Catatan: ini TIDAK akan mengatur ulang preferensi kembali ke nilai defaultnya.Ketahuilah bahwa jika Anda menggunakan
getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)
untuk mengambil preferensi yang harus Anda gunakan untuk menyetel default!
PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)
Sebagai contoh:
PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);
Saya harap ini dapat membantu seseorang.
sumber
dalam jawaban Pixel yang diterima:
dinyatakan bahwa
false
cara default tidak akan ditimpa. Bukan ini yang dilakukannya, ini hanyalah tanda efisiensi untuk menghentikan penguraian jika aplikasi Anda memiliki lebih dari satu titik masuk. Sayangnya pengujian tidak dilakukan per file preferensi, jadi jika Anda memiliki lebih dari satu file preferensi, Anda harus membuat kodetrue
pada semua kecuali yang pertama.Jika Anda khawatir tentang efisiensi, Anda dapat membuat kode seperti ini.
Jika Anda pernah menambahkan lebih banyak preferensi bersama, cukup setel SPL ke angka yang tinggi.
sumber
R.xml.prefs_device
,R.xml.prefs_test
, danR.xml.prefs_admin
. Anda dapat membuat satu file prefs yang berisi semua prefs dari atas:R.xml.prefs_for_loading_default_values
. Kemudian gunakan itu denganPreferenceManager.setDefaultValues(this, R.xml.prefs_for_loading_default_values, false);
onCreate()
subkelasApplication
(terdaftar di manifes), toh itu hanya akan dipanggil sekali setiap aplikasi dimulai. Untuk kinerja, akan lebih relevan (jika ada) untuk tidak melakukan parsing setiap kali aplikasi dimulai (alih-alih hanya pada permulaan pertama) dan inilah yangfalse
dilakukannya. Jadi ini lebih merupakan pertanyaan apakah Anda memerlukan pemeriksaan pada setiap permulaan (misalnya ketika preferensi baru mungkin ditambahkan) atau apakah itu cukup jika dilakukan pada permulaan pertama (atau preferensi disetel ulang).Misalnya memperpanjang
DialogPreference
saya melakukan ini:mDefault dapat berupa:
sumber
Juga pastikan Anda belum pernah menggunakan SharedPreferences sebelumnya. Untuk memastikannya tidak diubah (yang berarti setDefaultValues (ini, xml, false) tidak berpengaruh) hapus instalan Aplikasi Anda dan unggah lagi untuk memastikan tidak ada nilai yang tersentuh. Ini membantu saya.
sumber