Kotlin 能够对一个类的属性和方法进行扩展,且不须要继承或使用 Decorator 模式。 扩展是一种静态行为,对被扩展的类代码自己不会形成任何影响。android
扩展相似是一个设定了使用者的外置装甲。只要符合使用条件,就能够使用这种装甲。git
扩展最直接的好处,代码少,写得快github
findViewById(R.id.button).setOnClickListener(v -> doSomeThing();
复制代码
button.click{
doSomeThing()
}
fun <T : View> T.click(block: (T) -> Unit) = setOnClickListener{
block(it as T)
}
复制代码
众所周知,android开发中, view的重复点击是一个很常见的须要解决的问题。解决方案也不少,rxbindig,从新Listener,listenr中判断时间间隔。但都有一个缺点,代码太多啦。上吧,烤特林!bash
/**
* 扩展属性 延时触发 即多少时间内重复点击无反应
*/
private var <T : View> T.triggerDelay: Long
get() = if (getTag(1123461123) != null) getTag(1123461123) as Long else -1
set(value) {
setTag(1123461123, value)
}
/**
* 扩展属性 上次点击事件时间
*/
private var <T : View> T.triggerLastTime: Long
get() = if (getTag(1123460103) != null) getTag(1123460103) as Long else 0
set(value) {
setTag(1123460103, value)
}
/**
* 私有扩展方法 计算是否过了延时期
*/
private fun <T : View> T.delayOver(): Boolean {
var flag = false
val currentClickTime = System.currentTimeMillis()
if (currentClickTime - triggerLastTime >= triggerDelay) {
triggerLastTime = currentClickTime
flag = true
}
return flag
}
fun <T : View> T.clickWithTrigger(time: Long = 600, block: (T) -> Unit) {
triggerDelay = time
setOnClickListener {
if (delayOver()) {
block(it as T)
}
}
}
// 使用
button.clickWithTrigger{
doSomeThing()
}
复制代码
就这样一行代码,解决view重复点击ui
我搜集了一些kotlin经常使用的代码在里面,有须要的小伙伴能够扣一些下来用 github.com/luckyAF/Kom…spa
jumpTo<TestActivity>()
jumpToForResult<TestActivity>(null) { resultCode, data ->
}
复制代码
data.DEBUG()
复制代码
data.addTo(arrayList)
复制代码
总的来讲,扩展其实相似于语法糖,挺好用的。假如你们有实用的扩展也能够交流一下code