android– 具有共享首选项的LiveData

android– 具有共享首选项的LiveData,第1张

概述我有一个设置屏幕,我在其中设置一些值.当我设置这些值时,它会保存在共享首选项中,并且我需要这些值请求将网络api调用作为参数.现在,我可以在我的活动中使用侦听器来共享首选项,然后进行api调用并获取新数据,但我想在LiveData中使用它.如何使用LiveData侦听共享首选项中的更改,

我有一个设置屏幕,我在其中设置一些值.当我设置这些值时,它会保存在共享首选项中,并且我需要这些值
请求将网络API调用作为参数.

现在,我可以在我的活动中使用侦听器来共享首选项,然后进行API调用并获取新数据,但我想在liveData中使用它.

如何使用liveData侦听共享首选项中的更改,然后使用新参数进行网络调用.

解决方法:

以下令人敬畏的代码是SharedPreference的liveData实现.它完美地运作.

package com.chargingwatts.chargingalarm.util.preference;import androID.arch.lifecycle.liveDataimport androID.content.SharedPreferencesabstract class SharedPreferenceliveData<T>(val sharedPrefs: SharedPreferences,                                           val key: String,                                           val defValue: T) : liveData<T>() {    private val preferencechangelistener = SharedPreferences.OnSharedPreferencechangelistener { sharedPreferences, key ->        if (key == this.key) {            value = getValueFromPreferences(key, defValue)        }    }    abstract fun getValueFromPreferences(key: String, defValue: T): T    overrIDe fun onActive() {        super.onActive()        value = getValueFromPreferences(key, defValue)        sharedPrefs.registerOnSharedPreferencechangelistener(preferencechangelistener)    }    overrIDe fun onInactive() {        sharedPrefs.unregisterOnSharedPreferencechangelistener(preferencechangelistener)        super.onInactive()    }}class SharedPreferenceIntliveData(sharedPrefs: SharedPreferences, key: String, defValue: Int) :        SharedPreferenceliveData<Int>(sharedPrefs, key, defValue) {    overrIDe fun getValueFromPreferences(key: String, defValue: Int): Int = sharedPrefs.getInt(key, defValue)}class SharedPreferenceStringliveData(sharedPrefs: SharedPreferences, key: String, defValue: String) :        SharedPreferenceliveData<String>(sharedPrefs, key, defValue) {    overrIDe fun getValueFromPreferences(key: String, defValue: String): String = sharedPrefs.getString(key, defValue)}class SharedPreferenceBooleanliveData(sharedPrefs: SharedPreferences, key: String, defValue: Boolean) :        SharedPreferenceliveData<Boolean>(sharedPrefs, key, defValue) {    overrIDe fun getValueFromPreferences(key: String, defValue: Boolean): Boolean = sharedPrefs.getBoolean(key, defValue)}class SharedPreferencefloatliveData(sharedPrefs: SharedPreferences, key: String, defValue: float) :        SharedPreferenceliveData<float>(sharedPrefs, key, defValue) {    overrIDe fun getValueFromPreferences(key: String, defValue: float): float = sharedPrefs.getfloat(key, defValue)}class SharedPreferenceLongliveData(sharedPrefs: SharedPreferences, key: String, defValue: Long) :        SharedPreferenceliveData<Long>(sharedPrefs, key, defValue) {    overrIDe fun getValueFromPreferences(key: String, defValue: Long): Long = sharedPrefs.getLong(key, defValue)}class SharedPreferenceStringSetliveData(sharedPrefs: SharedPreferences, key: String, defValue: Set<String>) :        SharedPreferenceliveData<Set<String>>(sharedPrefs, key, defValue) {    overrIDe fun getValueFromPreferences(key: String, defValue: Set<String>): Set<String> = sharedPrefs.getStringSet(key, defValue)}fun SharedPreferences.intliveData(key: String, defValue: Int): SharedPreferenceliveData<Int> {    return SharedPreferenceIntliveData(this, key, defValue)}fun SharedPreferences.stringliveData(key: String, defValue: String): SharedPreferenceliveData<String> {    return SharedPreferenceStringliveData(this, key, defValue)}fun SharedPreferences.booleanliveData(key: String, defValue: Boolean): SharedPreferenceliveData<Boolean> {    return SharedPreferenceBooleanliveData(this, key, defValue)}fun SharedPreferences.floatliveData(key: String, defValue: float): SharedPreferenceliveData<float> {    return SharedPreferencefloatliveData(this, key, defValue)}fun SharedPreferences.longliveData(key: String, defValue: Long): SharedPreferenceliveData<Long> {    return SharedPreferenceLongliveData(this, key, defValue)}fun SharedPreferences.stringSetliveData(key: String, defValue: Set<String>): SharedPreferenceliveData<Set<String>> {    return SharedPreferenceStringSetliveData(this, key, defValue)}
总结

以上是内存溢出为你收集整理的android – 具有共享首选项的LiveData全部内容,希望文章能够帮你解决android – 具有共享首选项的LiveData所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1104872.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存