RxBinding的工作使用

RxBinding是Rxjava响应式开发的一种扩展,他是更高效的处理组件事件的插件工具包。

第一步:引入包

compile 'com.jakewharton.rxbinding:rxbinding-design:0.4.0'
备注:

   一定要在onDestory()中进行解绑,否则导致内存泄漏,或者使用RxLifecycle处理。

第二步:开干

1)Button的点击事件处理:

RxView.clicks(button).subscribe(new Action1() {
    @Override
    public void call(Void aVoid) {
        Toast.makeText(MainActivity.this,
                "点击 ",Toast.LENGTH_SHORT).show();
    }
});

2)将editText 输入的文本倒叙展示到button上

/**
 * 将editText 输入的文本倒叙展示到button上
 */
RxTextView.textChanges(editText)
        .map(new Func1, String>() {
            @Override
            public String call(CharSequence charSequence) {
                return  new StringBuilder(charSequence).reverse().toString();
            }
        })
        .subscribe(new Action1() {
            @Override
            public void call(String s) {
                button.setText(s);
            }
        });

3)点击事件 点击完成后,5秒后方可再次点击button,按钮去抖动

/**
 * 点击事件 点击完成后,5秒后方可再次点击
 */
RxView.clicks(button)
        .throttleFirst(5, TimeUnit.SECONDS)
        .subscribe(new Action1() {
    @Override
    public void call(Void aVoid) {
        Toast.makeText(MainActivity.this,
                "点击 ",Toast.LENGTH_SHORT).show();
    }
});

4)长按监听

/**
 * 长按监听
 */
RxView.longClicks(button)
        .subscribe(new Action1() {
            @Override
            public void call(Void aVoid) {
                Toast.makeText(MainActivity.this,
                        "点击 ",Toast.LENGTH_SHORT).show();
            }
        });

5)listview的点击事件

/**
 * listview的点击事件
 */
RxAdapterView.itemClicks( listView )
        .subscribe(new Action1() {
            @Override
            public void call(Integer integer) {
                Toast.makeText(MainActivity.this,
                        "点击 ",Toast.LENGTH_SHORT).show();
            }
        }) ;

6)checkBox勾选让button变高亮

/**
 *checkBox勾选让button变高亮
 */
button = (Button) findViewById( R.id.login_bt );
checkBox = (CheckBox) findViewById( R.id.checkbox );
RxCompoundButton.checkedChanges( checkBox )
        .subscribe(new Action1() {
            @Override
            public void call(Boolean aBoolean) {
                button.setEnabled( aBoolean );
                button.setBackgroundResource( aBoolean ? R.color.button_yes : R.color.button_no );
            }
        }) ;

7)搜索的时候,关键词联想功能 。debounce()在一定的时间内没有操作就会发送事件。

/**
 * 搜索的时候,关键词联想功能 。debounce()在一定的时间内没有操作就会发送事件。
 */
editText = (EditText) findViewById( R.id.editText );
listView = (ListView) findViewById( R.id.listview );

final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1 );
listView.setAdapter( adapter );

RxTextView.textChanges( editText )
        .debounce( 600 , TimeUnit.MILLISECONDS )
        .map(new Func1, String>() {
            @Override
            public String call(CharSequence charSequence) {
                String key = charSequence.toString() ;
                return key ;
            }
        })
        .observeOn( Schedulers.io() )
        .map(new Func1, List>() {
            @Override
            public List call(String keyWord ) {
                //get list
                List dataList = new ArrayList() ;
                if ( ! TextUtils.isEmpty( keyWord )){
                    for ( String s : getData()  ) {
                        if (s != null) {
                            if (s.contains(keyWord)) {
                                dataList.add(s);
                            }
                        }
                    }
                }
                return dataList ;
            }
        })
        .observeOn( AndroidSchedulers.mainThread() )
        .subscribe(new Action1>() {
            @Override
            public void call(List strings) {
                adapter.clear();
                adapter.addAll( strings );
                adapter.notifyDataSetChanged();
            }
        }) ;

8)获取验证码倒计时

verifyCodeObservable = RxView.clicks(button)
        .throttleFirst(10,TimeUnit.SECONDS)
        .subscribeOn(AndroidSchedulers.mainThread())
        .doOnNext(new Action1() {
            @Override
            public void call(Void aVoid) {
                RxView.enabled(button).call(false);
            }
        });

verifyCodeObservable.subscribe(new Action1() {
    @Override
    public void call(Void aVoid) {
        Observable.interval(1,TimeUnit.SECONDS,AndroidSchedulers.mainThread())
                .take(10)
                .subscribe(new Observer() {
                    @Override
                    public void onCompleted() {
                        RxTextView.text(button).call("获取验证码");
                        RxView.enabled(button).call(true);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(Long aLong) {
                        RxTextView.text(button).call("剩余" + (10 - aLong) + "秒");
                    }
                });
    }
});

9)表单的验证,只有当用户名,密码输入格式正确了,才可以去点击登录按钮

/**
 *表单的验证,只有当用户名,密码输入格式正确了,才可以去点击登录按钮。
 */
Observable ObservableName = RxTextView.textChanges(editText);
Observable ObservablePassword = RxTextView.textChanges(editText2);
Observable.combineLatest(ObservableName, ObservablePassword, new Func2, CharSequence, Boolean>() {
    @Override
    public Boolean call(CharSequence phone, CharSequence password) {
        return isPhoneValid(phone.toString()) && isPasswordValid(password.toString());
    }
}).subscribe(new Action1() {
    @Override
    public void call(Boolean aBoolean) {
        RxView.enabled(button).call(aBoolean);
    }
});





你可能感兴趣的:(RxBinding的工作使用)