-
Notifications
You must be signed in to change notification settings - Fork 34
Open
Description
1、Intent 获取参数,以 String 为例:
fun Activity.extraString(key: String, default: String = ""): Lazy<String> = lazy {
intent?.extras?.getString(key) ?: default
}
示例::
private val vinCode: String by extraString(DATA_VIN_CODE)
2、Boolean 的扩展,链式调用:
object Otherwise : BooleanExt<Nothing>()
class TransferData<T>(val data: T) : BooleanExt<T>()
inline fun <T> Boolean.yes(block: () -> T): BooleanExt<T> = when {
this -> TransferData(block.invoke())
else -> Otherwise
}
inline fun <T> BooleanExt<T>.otherwise(block: () -> T): T = when (this) {
is Otherwise -> block.invoke()
is TransferData -> this.data
}
示例:
isNotEmpty().yes {
}.otherwise {
}
这样嵌套用多了代码又丑又难阅读😂
3、view 防止多次点击
- 通过时间判断
fun View.singleClick(clickEventFun: () -> Unit) {
this.setOnClickListener {
if (Utils.isFastClick()) {
clickEventFun.invoke()
}
}
}
- 使用 rxjava 去重(目前已废弃),
@SuppressLint("CheckResult")
@Deprecated("memory leak")
fun View.singleClick(
intervalDuration: Long = 1,
unit: TimeUnit = TimeUnit.SECONDS,
eventFun: () -> Unit
) {
Observable
.create(object : ObservableOnSubscribe<View> {
lateinit var mEmitter: ObservableEmitter<View>
init {
[email protected] {
mEmitter.onNext(it)
}
}
override fun subscribe(emitter: ObservableEmitter<View>) {
mEmitter = emitter
}
})
.throttleLast(intervalDuration, unit)
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
eventFun()
}
}
Metadata
Metadata
Assignees
Labels
No labels