Это будет более широкий ответ, показывающий общий способ использования предпочтений очень элегантно, благодаря делегированным свойствам в Kotlin.Это позволяет нам предоставлять собственное резервное хранилище для повседневных свойств.
Рассмотрим этот класс, который описывает, как читать и писать логическое значение:
class BooleanPrefStore(val default: Boolean = false) {
operator fun getValue(thisRef: ContextWrapper?, property: KProperty<*>): Boolean =
PreferenceManager.getDefaultSharedPreferences(thisRef)
.getBoolean(property.name, default)
operator fun setValue(thisRef: ContextWrapper?, property: KProperty<*>, value: Boolean) {
PreferenceManager.getDefaultSharedPreferences(thisRef)
.edit()
.putBoolean(property.name, value)
.apply()
}
}
Метод получения и установки, использующий обычныеспособ читать и писать из предпочтений.И с помощью этого класса мы можем настроить наши свойства очень кратко и элегантно:
var Property1: Boolean by BooleanPrefStore()
var Property2: Boolean by BooleanPrefStore(true)
Он даже позволяет нам предоставлять значение по умолчанию, если оно отличается от «значения по умолчанию по умолчанию».Просто создайте другие классы помощников таким же образом, IntPrefStore
, LongPrefStore
или StringPrefStore
, если они вам нужны.Затем вы просто используете эти свойства или присваиваете им значения, и все они автоматически сохраняются и извлекаются из хранилища настроек.
Только одно предупреждение: хранилищу предпочтений необходим доступ к текущему контексту.Если вы объявите эти свойства в Activity
, Fragment
или аналогичном классе Android, который сохраняет контекст, вам больше нечего делать.Все эти классы реализуют ContextWrapper
.Но если вам нужны свойства в вашем собственном классе, вам нужно сделать его ContextWrapper
самостоятельно, например:
class MyClass private constructor(context: Context) : ContextWrapper(context) {
...
Просто предоставьте контекст, когда вы создадите его.