Skip to content

Instantly share code, notes, and snippets.

@Krosxx
Created August 7, 2020 03:50
Show Gist options
  • Save Krosxx/0fd4bcaa84922abb78569f438e573f17 to your computer and use it in GitHub Desktop.
Save Krosxx/0fd4bcaa84922abb78569f438e573f17 to your computer and use it in GitHub Desktop.
View 属性代理
import android.view.View
import android.widget.Spinner
import android.widget.TextView
import kotlin.reflect.KProperty
/**
* View 属性代理
*
* @param V : View
* @param T
* @property v V
* @property getter
* @property setter
* @constructor
*/
open class ViewPropertiesDelegate<V : View, T>(
val v: V,
val getter: (v: V) -> T,
val setter: (t: T, v: V) -> Unit
) {
operator fun getValue(thisRef: Any?, property: KProperty<*>): T = getter(v)
operator fun setValue(thisRef: Any?, property: KProperty<*>, t: T) = setter(t, v)
}
class TextViewDel(v: TextView) : ViewPropertiesDelegate<TextView, String>(v,
setter = { t, v -> v.text = t },
getter = { it.text.toString() }
)
class SpinnerDel(v: Spinner) : ViewPropertiesDelegate<Spinner, Int>(
v, setter = { t, v -> v.setSelection(t) },
getter = { v -> v.selectedItemPosition }
)
@Krosxx
Copy link
Author

Krosxx commented Aug 7, 2020

Usage:

val userView = view.user_view
val pwdView = view.pwd_view
var user by TextViewDel(userView)
var pwd by TextViewDel(pwdView)

//....
user = "123"
val account = Account(user, pwd)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment