初识RxBinding

RxBing以下内容来源于极客学院讲师课件,仅作为自己记笔记用。

 

RxBinding简介

   RxBinding是基于RxJava,用于绑定android UI的框架。它可以异步获取,并处理控件的各类事件。如:按钮点击事件、

文字变化事件、以及CheckBox选中事件等,android UI等控件按钮的响应事件。

它会将各类的事件由被观察者(Obserable)订阅(subscribe)之后,由订阅者(Subciber)进行处理。RxBinding对监听器的注册和控件的绑定进行了封装。从而使得代码更加的简洁,帮助开发者将更多的精力放在数据处理和业务逻辑上。

RxBinding对各种UI控件的点击事件进行了封装,用户可以直接进行调用。将各种点击监听事件作为参数传递,最终返回一个被观察者,然后用户可以进行调用。使用响应式编程的模式将点击事件转换为事件流,然后将它们进行发出。

 

RxBinding的使用场景

    a.防抖处理:防止抖动操作,手指点击按钮时,误操作点击了按钮多次。可以使用RxBinding捕获事件,防止误操作。

   b.选中状态的联动,省市联动的操作。

  c.自动补全功能,类似AutoCompleteText控件

 

代码演示

依赖包

    compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'
    compile 'com.jakewharton.rxbinding:rxbinding-support-v4:0.4.0'
    compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:0.4.0'
    compile 'com.jakewharton.rxbinding:rxbinding-design:0.4.0'

测试用例

单击事件按钮

  private Button btnTest;


    private int i=0;
    private Subscription subscription;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnTest=findViewById(R.id.btnTest);

        subscription = RxView.clicks(btnTest).throttleFirst(2, TimeUnit.SECONDS).subscribe(new Action1<Void>() {
            @Override
            public void call(Void aVoid) {
                Snackbar.make(btnTest,"捕获了"+ ++i+"次点击事件",Snackbar.LENGTH_LONG)  .show();
            }
        });

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(subscription!=null){
            subscription.unsubscribe();
            subscription=null;
        }
    }

定义Button按钮,RXBinding绑定了点击事件,设置2秒内捕获一次点击事件。模拟多次点击该按钮,在两秒内仅仅捕获一次

点击事件。

定义一个Subcription用于对绑定事件解除绑定,在onDestory中进行释放

长按绑定

RxView.longClicks(btnTest).subscribe(new Action1<Void>() {
            @Override
            public void call(Void aVoid) {
                Toast.makeText(MainActivity.this,"长按",Toast.LENGTH_SHORT).show();
            }
        });

自动补全功能

RxTextView.textChangeEvents(etSearch).debounce(400, TimeUnit.MILLISECONDS)
                .subscribeOn(AndroidSchedulers.mainThread())
                .switchMap(new Func1<TextViewTextChangeEvent, Observable<List<String>>>() {
                    @Override
                    public Observable<List<String>> call(TextViewTextChangeEvent textViewTextChangeEvent) {
                        return getDataFromNet(textViewTextChangeEvent.text().toString().trim()).subscribeOn(Schedulers.io());
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<List<String>>() {
                    @Override
                    public void call(List<String> strings) {
                        initAdapter(strings);
                    }
                });

RxTextView绑定text,400毫秒后响应自动补全的数据。其中switchMap用于数据的转换

联动功能 

 

RxCompoundButton.checkedChanges(checkBox).subscribe(new Action1<Boolean>() {
            @Override
            public void call(Boolean aBoolean) {
                checkBox.setChecked(aBoolean);
                btnNext.setBackgroundResource(aBoolean?R.color.colorAccent:R.color.colorPrimary);
            }
        });

选择后实现联动

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值