RxBinding的使用

RxBinding介绍


RxBinding是JakeWharton的一个开源库 , 它提供了一套基于RxJava的BindingApI. 可以帮助我们简化控件/视图添加的触发的响应事件,而且使用起来非常简单

RxBinding在github上的地址

点击打开链接

集成RxBinding的准备工作

在build.gradle中引用以下文件

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

compile 'com.jakewharton.rxbinding:rxbinding-design:1.0.0'

RxBinding使用

1.按钮防抖事件处理

[html] view plain copy

  1. but = (Button) findViewById( R.id.bt) ;
  2. RxView.clicks(but)
  3. //表示在2秒之内只取一个点击事件,防抖操作
  4. .throttleFirst(2, TimeUnit.SECONDS)
  5. .subscribe(new Action1<Void>() {
  6.     @Override
  7.     public void call(Void aVoid) {
  8.         Toast.makeText(mContext, "点击了....", Toast.LENGTH_SHORT).show();
  9.     }
  10. });

2.按钮长按监听

[html] view plain copy

  1. but = (Button) findViewById( R.id.bt) ;
  2. RxView.longClicks(but).subscribe(new Action1<Void>() {
  3.     @Override
  4.     public void call(Void aVoid) {
  5.         Toast.makeText(mContext, "long click...", Toast.LENGTH_SHORT).show();
  6.     }
  7. });

3.复选框选择监听

[html] view plain copy

  1. cb = (CheckBox) findViewById( R.id.checkbox );
  2. RxCompoundButton.checkedChanges(cb).subscribe(new Action1<Boolean>() {
  3.     @Override
  4.     public void call(Boolean aBoolean) {
  5.         Toast.makeText(mContext, aBoolean? "被选中":"取消选择", Toast.LENGTH_SHORT).show();
  6.     }
  7. });

4.Item点击事件 , 长按事件处理

[html] view plain copy

  1. listView = (ListView) findViewById( R.id.listview );
  2. RxAdapterView.itemClicks( listView )
  3. .subscribe(new Action1<Integer>() {
  4.     @Override
  5.     public void call(Integer integer) {
  6.          Toast.makeText(ListActivity.this, "item click " + integer ,                    Toast.LENGTH_SHORT).show();
  7. }
  8. }) ;
  9. RxAdapterView.itemLongClicks( listView)
  10.  .subscribe(new Action1<Integer>() {
  11.     @Override
  12.      public void call(Integer integer) {
  13.          Toast.makeText(ListActivity.this, "item long click " + integer ,Toast.LENGTH_SHORT).show();
  14.  }
  15. }) ;

5.搜索时候 , 关键词联想功能

[html] view plain copy

  1. editText = (EditText) findViewById( R.id.editText );
  2. listView = (ListView) findViewById( R.id.listview );
  3. final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1 ); listView.setAdapter( adapter );
  4. RxTextView.textChanges( editText )
  5.     .debounce( 600 , TimeUnit.MILLISECONDS )
  6.     .map(new Func1<CharSequence, String>() {
  7.       @Override
  8.       public String call(CharSequence charSequence) {
  9.         String key = charSequence.toString() ;
  10.     return key ;
  11.      }
  12. })
  13. .observeOn( Schedulers.io() )
  14. .map(new Func1<String, List<String>>() {
  15.     @Override
  16.     public List<String> call(String keyWord ) {
  17.         List<String> dataList = new ArrayList<String>() ;
  18.         if ( ! TextUtils.isEmpty( keyWord )){
  19.             for ( String s : getData() ) {
  20.                 if (s != null) {
  21.                      if (s.contains(keyWord)) {
  22.                             dataList.add(s);
  23.                     }
  24.                 }
  25.              }
  26.             }
  27.                  return dataList ;
  28.         }
  29.  })
  30. .observeOn( AndroidSchedulers.mainThread() )
  31. .subscribe(new Action1<List<String>>() {
  32.      @Override
  33.      public void call(List<String> strings) {
  34.         adapter.clear();
  35.         adapter.addAll( strings );
  36.         adapter.notifyDataSetChanged();
  37.       }
  38. }) ;

6.获取验证码设置倒计时

[html] view plain copy

  1. But3 = (Button) findViewById( R.id.bt3) ;
  2. mVerifyCodeObservable = RxView.clicks(but3)
  3.         .throttleFirst(20, TimeUnit.SECONDS)
  4.         .subscribeOn(AndroidSchedulers.mainThread())
  5.         .doOnNext(new Action1<Void>() {
  6.             @Override
  7.             public void call(Void aVoid) {
  8.                 RxView.enabled(but3).call(false);
  9.             }
  10.         });
  11. mVerifyCodeObservable.subscribe(new Action1<Void>() {
  12.     @Override
  13.     public void call(Void aVoid) {
  14.         Observable.interval(1,TimeUnit.SECONDS,AndroidSchedulers.mainThread())
  15.                 .take(20)
  16.                 .subscribe(new Observer<Long>() {
  17.                     @Override
  18.                     public void onCompleted() {
  19.                         RxTextView.text(but3).call("获取验证码");
  20.                         RxView.enabled(but3).call(true);
  21.                     }
  22.                     @Override
  23.                     public void onError(Throwable e) {
  24.                     }
  25.                     @Override
  26.                     public void onNext(Long aLong) {
  27.                         RxTextView.text(but3).call("剩余" + (20-aLong));
  28.                     }
  29.                 });
  30.     }
  31. });

总结

  • RxBinding把发布--订阅的模式用在了控件的点击和文本的变化上
  • RxBinding几乎支持工作中常用的所有控件以及事件
  • RxBinding引用库还有对应的kotlin支持库
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值