Using Kotlin's ReadWriteProperty for modern Android Preference handling
đˇī¸
Photo by Louis Tsai on Unsplash
Kotlin ㎠ReadWriteProperty ãäŊŋãŖãĻ Delegate ããĻ Preference ãããæããĢãããã¤ãäŊŋãŖãĻãŋãžããīŧ
ãĄãĒãŋãĢ ReadWriteProperty ã¯äģĨä¸ãŽãããĢåŽįžŠãããĻããžãīŧ
interface ReadWriteProperty<in R, T>
ReadWriteProperty - Kotlin Programming Language
ReadWriteProperty
äžãã° int ã Preference ãĢå
Ĩãã ReadWriteProperty
class IntPreference(
private val preferences: SharedPreferences,
private val name: String,
private val defaultValue: Int
) : ReadWriteProperty<Any, Int> {@WorkerThread
override fun getValue(thisRef: Any, property: KProperty<*>): Int {
return preferences.getInt(name, defaultValue)
}override fun setValue(thisRef: Any, property: KProperty<*>, value: Int) {
preferences.edit().putInt(name, value).apply()
}
}
äŊŋãå´
ãã¨ã¯äģĨä¸ãŽãããĒæãã§ Delegate
class SharedPreferenceStorage(context: Context) {
private val prefs = context.applicationContext.getSharedPreferences(PREFS_NAME, MODE_PRIVATE)
companion object {
private const val PREFS_NAME = "example.prefs"
private const val PREF_MESSAGE_COUNT = "pref_message_count"
}
var messageCount by IntPreference(prefs, PREF_MESSAGE_COUNT, 200)
}
äŊãããã
äžãã° Preference ãĢåēãå
Ĩãããå¤ãå¤ãã¨äģĨä¸ãŽãããĢ set()㨠get()ãäŊåãæ¸ããĒããã°ãĒããžããīŧ
var hoge: String
get() = preference.getString(HOGE, "")
set(value) = preference.edit().putString(HOGE, value).apply()
var huga: String
get() = preference.getString(HUGA, "")
set(value) = preference.edit().putString(HUGA, value).apply()
var foo: String
get() = preference.getString(FOO, "")
set(value) = preference.edit().putString(FOO, value).apply()
var bar: String
get() = preference.getString(BAR, "")
set(value) = preference.edit().putString(BAR, value).apply()
ä¸ããããĒãīŧ
ãããīŧ
var hoge by StringPreference(prefs, HOGE, "hoge")
var huga by StringPreference(prefs, HUGA, "huga")
var foo by StringPreference(prefs, FOO, "foo")
var bar by StringPreference(prefs, BAR, "bar")
ãžã¨ã
Preference ãå¤ããĒãã ããã¨æãããã¨ãã¯įŠæĨĩįãĢ ReadWriteProperty ãäŊŋãŖãĻãããīŧ