问题描述
我目前正在使用 rxjava,按钮单击事件的 rx 绑定,我想将其更改为使用 kotlin 协程流程。
请如何将此波纹管代码转换为使用 Flow
@Override
public Observable<Void> getStartFuellingObservable() {
return RxView.clicks(dataViewHolder.btnStartFuelling);
}
谢谢 R
解决方法
@ExperimentalCoroutinesApi
@CheckResult
fun View.clicks(): Flow<View> {
return callbackFlow {
setOnClickListener { safeOffer(it) }
awaitClose { setOnClickListener(null) }
}
}
,
您可以构建一个简单的 Kotlin 扩展函数,如下所示:
fun View.clicks(): Flow<Unit> = callbackFlow {
val listener = View.OnClickListener {
offer(Unit)
}
setOnClickListener(listener)
awaitClose { setOnClickListener(null) }
}
它包含有关如何拥有与 RxJava
类似的 API 及其 UI 绑定的更多信息。我认为你可以从那里受益