接上篇,上边已经实现了将View点击事件RxJava形式实现,这篇实现将TextView以及子类的的文字变化RxJava实现,有了上篇的基础这篇就很更简单了. 首先是建立静态方法,传入View,注意这里需要监听的是文字变化,所以传入的应该是TextView以及子类.

public class RxView {/**** @param textView 需要监听文字变化的view* @return 返回一个可被订阅的observable*/public static Observable<CharSequence> textChanges(TextView textView){return null;}
}
复制代码

然后就是编写我们的observable,点击事件是在onClickListener上面做文章,文字变化你估计已经猜到了,是在TextWacher上面做文章.

public class ViewTextChangesObservable extends Observable<CharSequence> {private TextView mTextView;public ViewTextChangesObservable(TextView mTextView) {this.mTextView = mTextView;}@Overrideprotected void subscribeActual(final Observer<? super CharSequence> observer) {//被订阅时,为TextView增加TextWatcher,文字文化时,向下游发射事件mTextView.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {observer.onNext(s);}@Overridepublic void afterTextChanged(Editable s) {}});//发送现有的事件到下游,便于combineLatest等操作符的使用observer.onNext(mTextView.getText());}
}
复制代码

也很简单,和点击事件不同的是多发送了一个目前的文字事件到下游,这样做是为了方便某些操作符比如(combineLates)的使用,这些操作符依赖observable上一次发射的事件.

修改RxView的代码:

public class RxView {/**** @param textView 需要监听文字变化的view* @return 返回一个可被订阅的observable*/public static Observable<CharSequence> textChanges(TextView textView){return new ViewTextChangesObservable(textView);}复制代码

测试代码:

public class MainActivity extends AppCompatActivity {String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);RxView.clicks(findViewById(R.id.tv_obs)).subscribe(new Consumer<Object>() {@Overridepublic void accept(Object o) throws Exception {Log.d(TAG, "我被点击了");}});TextView textView = findViewById(R.id.tv_obs);RxView.textChanges(textView).subscribe(new Consumer<CharSequence>() {@Overridepublic void accept(CharSequence charSequence) throws Exception {Log.d(TAG, "我的当前文字为: " + charSequence);}});textView.setText("test");}
}复制代码

输出:

05-04 01:58:37.355 3062-3062/april.lesincs.rxbinding_demo D/MainActivity: 我的当前文字为: Hello World!
05-04 01:58:37.355 3062-3062/april.lesincs.rxbinding_demo D/MainActivity: 我的当前文字为: test
复制代码

测试成功!监听文字变化也实现了,代码很短,而且只要理解了RxJava,代码也很好理解.

GitHub地址

github.com/Lesincs/RxB…

RxJava:自己动手撸一个RxBinding(二)。相关推荐

  1. 动手撸一个SQL规范检查工具

    背景 近几年公司人员规模快速增长,超过半数开发人员均为近两年入职的新员工,开发技能与经验欠缺,之前踩坑的经验也未能完全了解,出现了几起因慢SQL而引发的生产性能问题. 为了更好地指导产品SQL设计及开 ...

  2. 自己动手撸一个Jlink-TinyJlink诞生记

    对于一个单片机开发工作者来说,有一个趁手的调试器是非常必要的事情.前段时间在网上看到一个自制Jlink地 帖子,于是便萌生了一个自己动手做一个袖珍型的Jlink的冲动.姑且就叫它TinyJlink吧, ...

  3. 动手撸一个金馆长表情库——爬虫及异步请求

    前言:对于一些社交达人,微信或者QQ斗图几乎家常便饭.然而许多人手机里却只有那么几个表情,这样怎么在表情大战中取胜呢?不过不要忘了,我们是程序猿,没有弹药库自己造呗!于是就有了这篇文章. 项目gith ...

  4. 来吧,自己动手撸一个分布式ID生成器组件

    在经过了众多轮的面试之后,小林终于进入到了一家互联网公司的基础架构组,小林目前在公司有使用到架构组研究到分布式id生成器,前一阵子大概看了下其内部的实现,发现还是存在一些架构设计不合理之处.但是又由于 ...

  5. hashmap底层原理_周末自己动手撸一个 HashMap,美滋滋

    对HashMap的思考 通过写一个迷你版的HashMap来深刻理解 定义接口 接口实现 看MyHashMap的构造 Entry 看put如何实现 hash函数 resize和rehash get实现 ...

  6. 巨丝滑 —— 自己动手撸一个图片编辑器(支持长图)

    前言 产品拿着IOS的微信图片编辑给我看了下说:"这个功能应该很简单吧,你应该很快就能做好吧".    如果当时我的桌子上有块

  7. 给ofo共享单车撸一个微信小程序

    想学一下微信小程序,发现文档这东西,干看真没啥意思.所以打算自己先动手撸一个.摩拜单车有自己的小程序,基本功能都有,方便又小巧,甚是喜爱.于是我就萌生了一个给ofo共享单车撸一个小程序(不知道为啥of ...

  8. 用Kotlin撸一个图片压缩插件-插件基础篇(二)

    简述: 前两天写了篇用Kotlin撸一个图片压缩插件-导学篇,现在迎来了插件基础篇,没错这篇文章就是教你如何一步一步从零开始写一个插件,包括插件项目构建,运行,调试到最后的上线发布整个流程.如果你是插 ...

  9. 自己动手丰衣足食,撸一个flutterApp

    最近公司项目开发得差不多,顺便利用业余时间撸一个flutterApp. 这个项目架构用的模式我觉得是跟MVVM很像,model是M层,widget是V层,而provider就相当于VM层,只要数据一更 ...

最新文章

  1. 首张人类黑洞照片的背后
  2. 传输层的TCP和UDP
  3. LeetCode 507. 完美数
  4. 百度超级链Xuper关于金额相关问题
  5. 计算机二级考试科目python难吗_计算机二级python考试难吗
  6. 中油即时通信电脑版_一文看懂云视频会议与即时聊天软件的差别
  7. 基于http live streaming, 使用vlc + mediastreamsegmenter + apache 实现iOS视频直播
  8. 原创:微信小程序调用【统一下单】、【支付】、【支付回调】api并处理请求...
  9. Linux测网速工具,Linux中上下行网速测试工具 speedtest-cli
  10. SQL Server2008数据库置疑修复办法
  11. LOGO语言初学指南(一)下载LOGO
  12. openstack tungsten fabric/contrail中虚拟机yum出现could not retrieve 14: curl#7 - “Failed to connect to
  13. 3D建模最常用的是那三款软件?
  14. window微信双开
  15. 陌生人交友软件有哪些?陌生人社交APP排名|良心推荐
  16. 2018年前的面试题总结
  17. VMware Workstation 安装红帽Linux
  18. C#参数详解一(形参和实参)
  19. 避免创业的大忌,我为何给 TDengine 只选择了集群、高性能与 SQL 支持三大特点?...
  20. 用JS描述的数据结构及算法表示——栈和队列(基础版)

热门文章

  1. 亚马逊云科技推进云原生数据战略全面服务化,普惠150万企业数据创新
  2. 联想拯救者ISK游戏本加装固态硬盘和系统迁移
  3. java的ajax请求_[Java教程]ajax请求技术
  4. Linux中 top命令详解
  5. jQuery使用手册(1)
  6. 6 套多点触摸屏的手势图标集
  7. 【转载】机器学习算法中的准确率(Precision)、召回率(Recall)、F值(F-Measure)
  8. java利用poi读取excel_java利用POI读取excel文件的方法
  9. 设计模式(十一)中介者模式(调停者模式)
  10. Python使用yaml配置logging日志