欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

RxBinding的使用

程序员文章站 2022-06-25 15:06:30
使用场景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