RxBinding的工作使用

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

第一步:引入包

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

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

第二步:开干

1)Button的点击事件处理:

RxView.clicks(button).subscribe(new Action1<Void>() {
    @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<CharSequence, String>() {
            @Override
            public String call(CharSequence charSequence) {
                return  new StringBuilder(charSequence).reverse().toString();
            }
        })
        .subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                button.setText(s);
            }
        });

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

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

4)长按监听

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

5)listview的点击事件

/**
 * listview的点击事件
 */
RxAdapterView.itemClicks( listView )
        .subscribe(new Action1<Integer>() {
            @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<Boolean>() {
            @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<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1 );
listView.setAdapter( adapter );

RxTextView.textChanges( editText )
        .debounce( 600 , TimeUnit.MILLISECONDS )
        .map(new Func1<CharSequence, String>() {
            @Override
            public String call(CharSequence charSequence) {
                String key = charSequence.toString() ;
                return key ;
            }
        })
        .observeOn( Schedulers.io() )
        .map(new Func1<String, List<String>>() {
            @Override
            public List<String> call(String keyWord ) {
                //get list
                List<String> dataList = new ArrayList<String>() ;
                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<List<String>>() {
            @Override
            public void call(List<String> strings) {
                adapter.clear();
                adapter.addAll( strings );
                adapter.notifyDataSetChanged();
            }
        }) ;

8)获取验证码倒计时

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

verifyCodeObservable.subscribe(new Action1<Void>() {
    @Override
    public void call(Void aVoid) {
        Observable.interval(1,TimeUnit.SECONDS,AndroidSchedulers.mainThread())
                .take(10)
                .subscribe(new Observer<Long>() {
                    @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<CharSequence> ObservableName = RxTextView.textChanges(editText);
Observable<CharSequence> ObservablePassword = RxTextView.textChanges(editText2);
Observable.combineLatest(ObservableName, ObservablePassword, new Func2<CharSequence, CharSequence, Boolean>() {
    @Override
    public Boolean call(CharSequence phone, CharSequence password) {
        return isPhoneValid(phone.toString()) && isPasswordValid(password.toString());
    }
}).subscribe(new Action1<Boolean>() {
    @Override
    public void call(Boolean aBoolean) {
        RxView.enabled(button).call(aBoolean);
    }
});





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值