class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, rootKey)
}
}
root_preferences
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory app:title="@string/language_setting_header">
<ListPreference
app:defaultValue="en"
app:entries="@array/language_entries"
app:entryValues="@array/language_values"
app:key="@string/key_lang"
app:title="@string/language_setting_title"
app:useSimpleSummaryProvider="true" />
</PreferenceCategory>
for
onPreferenceTreeClick
Only trig when show the dialog but not trig on each item in ListPreference
Instead of listen to each item of the list
Listen when prefChange. Also registListener onResume and onPause
Solution in Kotlin for PreferenceFragmentCompat
class SettingsFragment : PreferenceFragmentCompat() {
private val prefListener = SharedPreferences.OnSharedPreferenceChangeListener { prefs, key ->
when (key) {
"lang" -> {
activity?.finish()
}
}
}
override fun onResume() {
super.onResume()
preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(
prefListener
)
}
override fun onPause() {
preferenceManager.sharedPreferences.unregisterOnSharedPreferenceChangeListener(
prefListener
)
super.onPause()
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, rootKey)
preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(
prefListener
)
}
}
https://developer.android.com/reference/androidx/preference/PreferenceFragmentCompat
This is how am doing it.
class SettingsFragment : PreferenceFragmentCompat() {
var prefListener = SharedPreferences.OnSharedPreferenceChangeListener { prefs, key ->
when (key) {
"lang" -> {
activity?.finish()
}
}
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, rootKey)
preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(
prefListener
)
}
}
XML
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:orderingFromXml="true">
<ListPreference
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:defaultValue="0"
android:entries="@array/array_update"
android:entryValues="@array/array_update_hours"
android:key="update"
android:summary="@string/pref_summary_update"
android:title="@string/pref_title__update" />
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.