Как мими c onPreferenceChanged () с помощью Preference.OnPreferenceChangeListener - PullRequest
0 голосов
/ 13 июля 2020

Android В настройках Jetpack есть прослушиватель кликов Preference.OnPreferenceClickListener и прослушиватель изменения предпочтений Preference.OnPreferenceChangeListener. Однако нет слушателя для случаев, когда значение изменено , то есть слушателя, который вызывается, когда предпочтение успешно обновлено.

Usecase

У меня есть фоновая служба, которая выполняет огромную работу. Он запускается из нескольких мест и в дальнейшем считывает значение из SharedPreferences.

Теперь проблема в том, что когда служба запускается с OnPreferenceChange() и пытается прочитать значение SharedPreferences, значение не Пока не обновлялся.

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

    // here newValue is of no use
     startService()

    return true
}

1 Ответ

1 голос
/ 14 июля 2020

Вы можете использовать

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

Это должно вызываться после изменения предпочтений

...