对Rxjava不熟悉的同学可以先看我之前写的几篇文章

RxJava 和 RxAndroid 一 (基础)
RxJava 和 RxAndroid 二(操作符的使用)
RxJava 和 RxAndroid 三(生命周期控制和内存优化)


另外推荐几篇比较好的文章,有助于理解Rxjava
安卓客户端是如何使用 RxJava 的
通过 RxJava 实现一个 Event Bus – RxBus
玩透RxJava(一)基础知识
RxJava 教程第二部分:事件流基础之 过滤数据
Meizhi Android之RxJava & Retrofit最佳实践


前言:RxBinding 是 Jake Wharton 的一个开源库,它提供了一套在 Android 平台上的基于 RxJava的 Binding API。所谓 Binding,就是类似设置 OnClickListener 、设置 TextWatcher 这样的注册绑定对象的 API。

一:git地址

https://github.com/JakeWharton/RxBinding

二、androidStudio 使用

一般的包下面就用

compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'

v4'support-v4' library bindings:

compile 'com.jakewharton.rxbinding:rxbinding-support-v4:0.4.0'

'appcompat-v7' library bindings:

compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:0.4.0'

'design' library bindings:

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

三、代码示例

  • Button 防抖处理

     button = (Button) findViewById( R.id.bt ) ;RxView.clicks( button ).throttleFirst( 2 , TimeUnit.SECONDS )   //两秒钟之内只取一个点击事件,防抖操作.subscribe(new Action1<Void>() {@Overridepublic void call(Void aVoid) {Toast.makeText(MainActivity.this, "点击了", Toast.LENGTH_SHORT).show();}}) ;
    
  • 按钮的长按时间监听

     button = (Button) findViewById( R.id.bt ) ;//监听长按时间RxView.longClicks( button).subscribe(new Action1<Void>() {@Overridepublic void call(Void aVoid) {Toast.makeText(MainActivity.this, "long click  !!", Toast.LENGTH_SHORT).show();}}) ;
    
  • listView 的点击事件、长按事件处理

    listView = (ListView) findViewById( R.id.listview );List<String> list = new ArrayList<>() ;for ( int i = 0 ; i < 40 ; i++ ){list.add( "sss" + i ) ;}final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1 );adapter.addAll( list );listView.setAdapter( adapter );//item click eventRxAdapterView.itemClicks( listView ).subscribe(new Action1<Integer>() {@Overridepublic void call(Integer integer) {Toast.makeText(ListActivity.this, "item click " + integer , Toast.LENGTH_SHORT).show();}}) ;//item long clickRxAdapterView.itemLongClicks( listView).subscribe(new Action1<Integer>() {@Overridepublic void call(Integer integer) {Toast.makeText(ListActivity.this, "item long click " + integer , Toast.LENGTH_SHORT).show();}}) ;
    
- 用户登录界面,勾选同意隐私协议,登录按钮就变高亮
button = (Button) findViewById( R.id.login_bt );
checkBox = (CheckBox) findViewById( R.id.checkbox );RxCompoundButton.checkedChanges( checkBox ).subscribe(new Action1<Boolean>() {@Overridepublic void call(Boolean aBoolean) {button.setEnabled( aBoolean );button.setBackgroundResource( aBoolean ? R.color.button_yes : R.color.button_no );}}) ;
```

效果图

  • 搜索的时候,关键词联想功能 。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>() {@Overridepublic String call(CharSequence charSequence) {//get the keywordString key = charSequence.toString() ;return key ;}}).observeOn( Schedulers.io() ).map(new Func1<String, List<String>>() {@Overridepublic List<String> call(String keyWord ) {//get listList<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>>() {@Overridepublic void call(List<String> strings) {adapter.clear();adapter.addAll( strings );adapter.notifyDataSetChanged();}}) ;
    

    运行效果

总结

  • RxBinding就是把 发布--订阅 的模式用在了android控件的点击,文本变化上。通过 RxBinding 把点击监听转换成 Observable 之后,就有了对它进行扩展的可能。

  • RxBindingrxlifecycle 结合起来使用,可以控制控件监听的生命周期。关于rxlifecycle的使用,请参照RxJava 和 RxAndroid 三(生命周期控制和内存优化)

  • 这个系列的代码示例都在 github https://github.com/zyj1609wz/RxJava_RxAndroid

转载于:https://www.cnblogs.com/Free-Thinker/p/7561477.html

RxJava 和 RxAndroid 四(RxBinding的使用)相关推荐

  1. RxJava 和 RxAndroid 三(生命周期控制和内存优化)

    前言:对Rxjava.Rxandroid不了解的同学可以先看看 RxJava 和 RxAndroid RxJava 和 RxAndroid 二(操作符的使用) RxJava使我们很方便的使用链式编程, ...

  2. RxJava 和 RxAndroid 五(线程调度)

    对rxJava不了解的同学可以先看 RxJava 和 RxAndroid 一 (基础) RxJava 和 RxAndroid 二(操作符的使用) RxJava 和 RxAndroid 三(生命周期控制 ...

  3. android RxJava(RxAndroid)的简单使用

    今天,简单讲讲android里如何使用RxJava(RxAndroid). Android框架系列: 一.android EventBus的简单使用 二.android Glide简单使用 三.and ...

  4. 数据结构链表例程_如何掌握RxJava例程的四个结构

    数据结构链表例程 by Ayusch Jain 通过Ayusch Jain 如何掌握RxJava例程的四个结构 (How to get a grip on the four constructs of ...

  5. RxJava和RxAndroid

    现在RxJava和RxAndroid越来越火爆,自己在业余时间也学习了一下,感觉确实很好用,之前 为了完成页面刷新,数据请求,组件信息传递的时候,要使用handler,真的是逻辑思路很强,稍微不注意, ...

  6. 重拾Android之路(五)RxJava和RxAndroid

    现在RxJava和RxAndroid越来越火爆,自己在业余时间也学习了一下,感觉确实很好用,之前 为了完成页面刷新,数据请求,组件信息传递的时候,要使用handler,真的是逻辑思路很强,稍微不注意, ...

  7. 这样,你才能算会 RxJava、RxAndroid 之取消订阅

    一:概述 前几天app 总是空指针奔溃,发现为某个 Fragment 中的控件为null 导致的.而且这个Fragment 是能够正常显示的.那么为什么还会空指针呢? 二:问题排查 这个app使用了 ...

  8. RxJava 和 RxAndroid 一 (基础)

    1.RxJava 项目地址 https://github.com/ReactiveX/RxJava 2.RxAndroid 项目地址    https://github.com/ReactiveX/R ...

  9. RxJava 和 RxAndroid 二(操作符的使用)

    前言:对Rx不了解的朋友可以先看我的第一篇博文  RxJava 和 RxAndroid 一 (基础),是对Rxjava的基本介绍 1.merge操作符,合并观察对象 19 List<String ...

最新文章

  1. matlab 二次指数平滑法预测
  2. #51CTO学院四周年# 成长路上的我和你
  3. PyTorch 实现经典模型8:FCN
  4. Python面向对象的三大特性
  5. php入门的ppt,php学习 字符串课件
  6. 【翻译】Sencha Cmd中脚本压缩方法之比较
  7. 2021辽宁高考成绩查询公布,2021辽宁高考成绩什么时候出
  8. python的idle支持两种方式_BO发布E8 Sport耳机,支持IP57防水
  9. 举例说明TCP/IP
  10. Fuchsia中GN与Ninja构建demo
  11. SpringMVC系列(四)使用 POJO 对象绑定请求参数值
  12. ASCALL码对照表
  13. 高中计算机思维导图,为高中信息技术教学插上思维导图翅膀
  14. erp生产管理系统对电子工厂发挥的作用
  15. ios识别人脸自动拍照_GitHub - qingweiiOS/FaceRecognition: 活体人脸识别,识别人脸,识别张嘴和摇头动作,并拍照...
  16. 【STM32技巧】HX711称重芯片详细说明
  17. Ubuntu下搜狗拼音突然无法输入中文的解决办法
  18. 第二届全国大学生网络安全精英赛初赛错题笔记
  19. 用eclipse和androidstudio和基于高德地图API开发的附近购平台的java服务端和android客户端数据库用mysql包括程序设计图
  20. sql命令手册(转载)http://www.fanqiang.com

热门文章

  1. 页面中flash文件的加载
  2. 【重识 HTML + CSS】Photoshop 简单使用
  3. powershell自动化操作AD域、Exchange邮箱系列(8)—链接操作Sqlserver数据库
  4. 回测引擎代码分析流程图
  5. mysql 模式名表名不支持_MySQL sql_mode 说明(及处理一起sql_mode引发的问题)
  6. as3 primitives
  7. 重启手机出现机器人加一个叹号_印度科幻脑洞高能!《宝莱坞机器人2.0》内地定档...
  8. python的pyaudio教程入门_『开发技巧』Python音频操作工具PyAudio上手教程
  9. 数据结构 5-2 二叉树建树
  10. 豆瓣电影 知识图谱 Neo4j