Saya memiliki aktivitas Preferensi yang menggunakan Preferensi Daftar sebagaimana ditentukan oleh file XML saya. Bagaimana cara mengatur ringkasan aktivitas daftar ke nilai yang dipilih?
Terima kasih!
Cara termudah untuk melakukannya adalah dengan meminta Android melakukannya untuk Anda. Dengan asumsi Anda ingin ringkasan cocok dengan nilai yang dipilih, Anda cukup menyetel ringkasan ListPreference
ke"%s"
menggunakan XML atau setSummary
metode di Java. Sebagai contoh:
<ListPreference
android:key="pref_list"
android:title="A list of preferences"
android:summary="%s"
android:entries="@array/pref_list_entries"
android:entryValues="@array/pref_list_entries_values"
android:defaultValue="0" />
Android akan mengganti %s
dengan nilai string preferensi saat ini, seperti yang ditampilkan oleh alat ListPreference
pilih. Ringkasan daftar juga akan disetel dengan benar saat Anda memasukkan aktivitas — Anda tidak perlu menulis kode khusus apa pun untuk menyiapkannya pada awalnya.
Ini juga berfungsi dengan AndroidX ListPreference
.
Aku menghabiskan jauh terlalu banyak waktu mucking dengan SharedPreferences
pendengar sebelum saya menemukan ini.
"%s"
? Dalam pengujian saya,"%s"
tidak berfungsi dengan Gingerbread dan versi sebelumnya.androidx
.Anda dapat menggunakan
OnPreferenceChangeListener
untuk mengubah ringkasan secara dinamis. Masalahnya adalah ia mendapatkan nilai yang dipilih (dariandroid:entryValues
), bukan caption (android:entries
). Dalam kode berikut saya gunakantoString()
, tetapi solusi yang tepat adalah menemukan judul untuk nilainya. Bagaimanapun, idenya berhasil:sumber
Saya juga ingin mencapai sesuatu yang serupa, tetapi masalah dengan https://stackoverflow.com/a/8155029/592025 adalah, ini menunjukkan nilai untuk preferensi saya (seperti 1, 2 3 dll). Saya ingin menunjukkan entri (string yang dapat dibaca manusia) sesuai dengan nilai yang dipilih.
Jadi saya mengubahnya dengan cara ini dan bekerja sesuai kebutuhan saya.
Triknya adalah dengan menggunakan
getEntry()
alih-alihgetValue()
dan setelah nilainya diubah, untuk menyetel nilai secara eksplisit dan membaca kembali entri tersebut.sumber
Saya pikir apa yang Anda cari jauh lebih sederhana dari yang Anda pikirkan, tambahkan baris kode berikut ke
Preference
item Anda :Jadi akan terlihat seperti ini:
sumber
Pertama, dapatkan referensi ke ListPreference di onCreate Anda. Anda dapat menggunakan findPreference (). Sebagai contoh:
Kemudian, saat Anda pertama kali memuat Aktivitas dan setiap kali nilai preferensi berubah, gunakan metode apa pun yang Anda inginkan untuk mendapatkan nilai ListPreference dan setel ringkasannya dengan:
sumber
Ini adalah kode yang saya gunakan, tidak memanggil setValue secara manual, karena saya yakin ini sudah dilakukan di tahap selanjutnya.
Berikut ini contohnya:
sumber
Inilah yang saya lakukan dan berhasil dengan baik. Di onSharedPreferenceChangeListener saya hanya memeriksa kunci dari apa yang diubah dan kemudian untuk ListPreferences mengubahnya kembali ke Human readable (entri bukan entryValue) dengan pernyataan if. Cukup mudah.
tata letak xml
larik xml
sumber
Berikut adalah versi yang diperluas dari jawaban midhunhk yang membahas string "android: summary" yang bermanfaat juga
Dan, untuk memperjelas, android: summary dihapus dari xml terkait.
sumber
Dan inilah salah satu cara untuk menangani pembaruan ringkasan preferensi Nada Dering mengikuti pilihan pengguna.
sumber
Anda memiliki metode bindPreferenceSummaryToValue di PreferenceActivity,
Anda dapat dengan mudah menambahkan ringkasan ke daftar dengan melakukan seperti ini:
Pada metode OnCreate Anda memanggil fungsi bind seperti ini:
Anda dapat dengan mudah menambahkan ringkasan orang lain dengan cara yang sama:
sumber
di bawah onCreatePreferences lakukan ini ::
sumber