我有一个设置屏幕,我在其中设置一些值.当我设置这些值时,它会保存在共享首选项中,并且我需要这些值
请求将网络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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)