У вас есть:
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
when (key){
"reply" -> {
Toast.makeText(this, "Reply selected", Toast.LENGTH_SHORT).show()
}
"reply_to_all" -> {
Toast.makeText(this, "Reply To All selected", Toast.LENGTH_SHORT).show()
}
}
}
Это будет вызвано, когда значение в вашем SharedPreferences
изменится. key
- это ключ, связанный с измененным значением предпочтения. В случае, если на экране отображается SharedPreferences
, эта клавиша вводится с android:key
или app:key
.
В вашем случае ваш app:key
равен list_reply
:
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
<ListPreference
app:defaultValue="reply"
app:entries="@array/reply_entries"
app:entryValues="@array/reply_values"
app:key="list_reply"
app:title="@string/reply_title"
app:useSimpleSummaryProvider="true" />
</PreferenceScreen>
Ваша onSharedPreferenceChanged()
функция прямо сейчас полностью игнорирует это, поскольку вы не ищете list_reply
. Вам нужно добавить ветку к существующей when
, чтобы покрыть list_reply
, например:
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
when (key){
"reply" -> {
Toast.makeText(this, "Reply selected", Toast.LENGTH_SHORT).show()
}
"reply_to_all" -> {
Toast.makeText(this, "Reply To All selected", Toast.LENGTH_SHORT).show()
}
"list_reply" -> {
Toast.makeText(this, "The user chose something from the ListPreference -- get the updated value from the SharedPreferences", Toast.LENGTH_SHORT).show()
}
}
}
И, если reply
и reply_to_all
не являются действительно ключами, вы можете сделать что-то вроде:
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
when (key) {
"list_reply" -> {
if (sharedPreferences.getString(key, "reply") == "reply") {
// TODO
}
else {
// TODO
}
}
}
}