RxBinding的使用
程序员文章站
2022-03-27 11:35:15
使用场景1、防止重复点击2、多次监听点击事件3、点击后获取倒计时4、把监听事件转换成响应事件RxView(clicks)、RxTextView(textChanges)、RxAdapterView(itemClicks)、RxCompoundButton(checkChanges)、RxRadioGroup,RxSeekBar, RxSearchView, RxRatingBar, RxToolbar等还有很多其他的。本质上就是对控件做了监听,只是把触发事件转换成了Rxjava类型的事件...
使用场景
1、防止重复点击
2、多次监听点击事件
3、点击后获取倒计时
4、把监听事件转换成响应事件
RxView(clicks)、
RxTextView(textChanges)、
RxAdapterView(itemClicks)、
RxCompoundButton(checkChanges)、
RxRadioGroup,RxSeekBar, RxSearchView, RxRatingBar, RxToolbar等还有很多其他的。
本质上就是对控件做了监听,只是把触发事件转换成了Rxjava类型的事件流。
导入依赖
implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
注意:RxBinding包中包含了Rxjava的内容,所以不需要再添加Rxjava的依赖了。
开始使用
1、view短按事件,无防抖:
.subscribe(Consumer {
Log.d("daxxx ","无防抖效果")
CC.obtainBuilder("Model1Component")
.setActionName("FirstActivity")
.build()
.callAsync()
})
2、view短按事件,防抖效果
.throttleFirst(2,TimeUnit.SECONDS) //两秒内只取一个点击事件,防抖操作
.subscribe(Consumer {
Log.d("daxxx ","防抖效果")
CC.obtainBuilder("Model1Component")
.setActionName("FirstActivity")
.build()
.callAsync()
})
3、view长按事件,无防抖:
.subscribe(Consumer {
Log.d("daxxx ","无防抖效果")
CC.obtainBuilder("Model1Component")
.setActionName("FirstActivity")
.build()
.callAsync()
})
4、点击view,分发多个事件:
val compositeDisposable = CompositeDisposable()
val disposable1 = observable
.subscribe(Consumer {
Log.d("daxxx ","效果1")
})
val disposable2 = observable
.subscribe(Consumer {
Log.d("daxxx ","效果2")
})
compositeDisposable.add(disposable1)
compositeDisposable.add(disposable2)
5、绘制监听:
.subscribe(Consumer {
Log.d("daxxx ","view被绘制") //注意,这里会触发两次
})
6、拖拽监听:
7、滑动时监听:
.subscribe(Consumer {
Log.d("daxxx ","滑动")
})
8、监听EditText输入事件:
.subscribe(Consumer {
Log.d("daxxx ", "字体发送变化,当前字体: $it")
})
9、监听ListView点击事件:
.subscribe(Consumer {
Log.d("daxxx ","当前被点击的item为:$it")
})
10、监听CheckBox状态变化
.subscribe(Consumer {
if (it) {
Log.d("daxxx ","checkbox被选中")
} else {
Log.d("daxxx ","checkbox没选中")
}
})
11、RxBinding和Rxlifecycle结合起来使用,可以控制控件的生命周期:
//点击事件,绑定Activity或fragment的生命周期
val disposable = RxView.clicks(cb)
.compose(this.bindToLifecycle())
.subscribe(Consumer {
Log.d("daxxx ","1")
})
//按照生命周期的需要来绑定
//这里是在onStop方法执行时自动停止
val disposablex = RxView.clicks(btn_negative_model1)
.compose(this.bindUntilEvent(ActivityEvent.STOP))
.subscribe(Consumer {
Log.d("daxxx ","2")
})
12、表单验证,输入正确的用户名和密码才能点击按钮登录
RxTextView.textChanges(et_name)
.map {
it.toString()
},
RxTextView.textChanges(et_password)
.map {
it.toString()
},
BiFunction<String, String, Boolean?> {
name, password -> name == "ycx" && password == "123"
}
).subscribe(Consumer {
if (it!!){
btn_negative_model1.isEnabled = true
RxView.clicks(btn_negative_model1)
.subscribe(Consumer {
Log.d("daxxx ","登录成功")
})
} else {
btn_negative_model1.isEnabled = false
}
})
本文地址:https://blog.csdn.net/yang553566463/article/details/108128294