如何使用Preference.OnPreferenceChangeListener模仿onPreferenceChanged()

时间:2020-07-13 20:13:30

标签: android android-preferences android-jetpack android-settings

Android Jetpack首选项具有一个点击侦听器Preference.OnPreferenceClickListener和首选项更改侦听器Preference.OnPreferenceChangeListener。但是,更改时没有任何侦听器,即,当成功更新首选项时都会调用该侦听器。

用例

我有一个后台服务,可以完成很多工作。它从多个地方开始,一直到SharedPreferences读取一个值。

现在,问题是,当服务从OnPreferenceChange()开始并尝试读取SharedPreferences的值时,该值尚未更新。

  override fun onPreferenceChange(preference: Preference?, newValue: Any?): Boolean {

    // here newValue is of no use
     startService()

    return true
}

1 个答案:

答案 0 :(得分:1)

您可以使用

val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
sharedPreferences.registerOnSharedPreferenceChangeListener { _, _ -> 
        startService()
}

应该在更改首选项后调用