RxBinding系列之RxTextView(二)
前言
本篇一起来学习RxBinding中的RxTextView,J大神将Android中TextView的一些事件及动作加以RxJava的观察者模式并封装了起来就形成了RxTextView,使用起来也很简单。
textChange文本改变事件
textChanges
RxTextView.textChanges(TextView view)
,内部封装了TextWatcher文本改变监听。
addDisposable(RxTextView.textChanges(etRxTextView)
.subscribe(new Consumer<CharSequence>() {@Overridepublic void accept(CharSequence charSequence) throws Exception {Log.e("rx_binding_test", "textChanges:文本改变了:" + charSequence.toString());}
}));复制代码
textChangeEvents
RxTextView.textChangeEvents(TextView view)
,内部同样封装了TextWatcher文本改变监听。不同的是其返回数据的类型为TextViewTextChangeEvent,内部包含详细的文本改变数据。为了简化代码,以下实例将使用Lambda表达式的形式。
addDisposable(RxTextView.textChangeEvents(etRxTextView).subscribe(textViewTextChangeEvent -> {Log.e("rx_binding_test", "textChanges:文本改变了:" + "before:" + textViewTextChangeEvent.before() + ",start:" + textViewTextChangeEvent.start() + ",text:" + textViewTextChangeEvent.text() + ",count:" + textViewTextChangeEvent.count());}));复制代码
实际场景
在实际项目开发中经常会遇到搜索文本框需根据用户实时输入的文本进行检索,或去数据库查询,或去服务器请求检索。如果文本每改变一次都去检索的话会导致重复大量查数据库或请求服务器,很影响内存。来看下使用RxBinding如何解决这个问题。
addDisposable(RxTextView.textChanges(etRxTextView)//限流时间500ms.debounce(500, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread())//CharSequence转换为String.map(CharSequence::toString).subscribe(s -> {//这里可以查询数据库或请求服务器查询Log.e("rx_binding_test", "textChanges:文本改变了:" + s);}));复制代码
正是由于RxBinding使用的是RxJava形式,所以RxJava中的操作符我们都可以使用。利用debounce操作符进行限流,就能避免因为用户输入速度过快导致多次请求服务器了。还可以利用map操作符将CharSequence转换为String再返回。Look,解决这个问题是不是So easy!
editorAction回车点击事件
editorActions
RxTextView.editorActions(TextView view)
,内部封装了OnEditorActionListener软键盘回车点击监听。
addDisposable(RxTextView.editorActions(etRxTextView).subscribe(integer -> {Log.e("rx_binding_test", "editorActions:输入完毕,点击回车:");}));复制代码
editorActionEvents
RxTextView.editorActionEvents(TextView view)
,内部同样封装了OnEditorActionListener软键盘回车点击监听。不同的是它的返回类型为TextViewEditorActionEvent,包含actionId,keyEvent等信息。
addDisposable(RxTextView.editorActionEvents(etRxTextView).subscribe(textViewEditorActionEvent -> {KeyEvent keyEvent = textViewEditorActionEvent.keyEvent();//判断up状态if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER && keyEvent.getAction() == KeyEvent.ACTION_UP) {Log.e("rx_binding_test", "editorActionEvents:输入完毕,点击回车:" + textViewEditorActionEvent.keyEvent());}}));复制代码
注意:KeyEvent包含down和up事件,所以会出现回调两次的问题。根据KeyEvent加入一种判断即可避免此问题。
此外,RxTextView中还有beforeTextChangeEvents与afterTextChangeEvents,使用起来都差不多就不一一介绍了。
View操作
RxTextView中还封装了一些常用的例如setText()
、setHint()
、setTextColor()
等TextView的操作。使用起来也很简单,如下:
addDisposable(RxTextView.editorActions(etRxTextView).subscribe(integer -> {RxTextView.text(etRxTextView).accept("LeiHolmes");RxTextView.hint(etRxTextView).accept("请输入姓名");RxTextView.color(etRxTextView).accept(Color.parseColor("#00ff00"));}));复制代码
本文疑问
addDisposable()方法什么鬼?
飞机到本系列第一篇有讲解:
RxBinding系列之RxView(一)
Lambda表达式什么鬼?
飞机到我写的Lambda表达式教程:
Lambda表达式基本语法与应用
总结
RxTextView中的内容不多,所以本篇篇幅较短,不要说我水啊,哈哈哈,我是觉得一种一种讲起来比较细致,建议码友们都上手敲一敲试一试啊。
进阶中的码猿一枚,写的不对的地方欢迎大神们留言指正,有什么疑惑或者建议也可以在我Github上RxBindingDemo项目Issues中提出,我会及时回复。
附上Demo的地址:
RxBindingDemo
另外:欢迎光临我的Hexo个人博客:Lei’s Blog
RxBinding系列之RxTextView(二)相关推荐
- [原创]商城系统下单库存管控系列杂记(二)(并发安全和性能部分延伸)
商城系统下单库存管控系列杂记(二)(并发安全和性能部分延伸) 前言 参与过几个中小型商城系统的开发,随着时间的增长,以及对系统的深入研究和测试,发现确实有很多值得推敲和商榷的地方(总有 ...
- Microsoft .Net Remoting系列专题之二:Marshal、Disconnect与生命周期以及跟踪服务
Microsoft .Net Remoting系列专题之二 一.远程对象的激活 在Remoting中有三种激活方式,一般的实现是通过RemotingServices类的静态方法来完成.工作过程事实上是 ...
- windows server 2003 DNS 细谈系列之(二)记录类型、数据库
windows server 2003 DNS 细谈系列之(二)记录类型.数据库<?xml:namespace prefix = o ns = "urn:schemas-microso ...
- SVN系列操作(二)svn不显示图标的解决方法
SVN系列操作(二)&svn不显示图标的解决方法 参考文章: (1)SVN系列操作(二)&svn不显示图标的解决方法 (2)https://www.cnblogs.com/zymnst ...
- oracle迁移postsql的,osdba's blog : Oracle迁移PostgreSQL系列文章之二:merge语句
Oracle迁移PostgreSQL系列文章之二:merge语句 Posted on 2015-03-06 11:12:46 by osdba 我们知道,Oracle中有一个特别的merge语句.而P ...
- 乐鑫代理-启明云端分享ESP32系列教程之二:Linux搭建esp-idf环境
提示:此教程依据乐鑫官方的ESP32入门教程总结而来,仅供个人参考学学习,如有错误,欢迎批评指正.乐鑫官方参考: 乐鑫官方文档地址 1.搭建esp-idf环境 1.1安装虚拟机与Ubuntu 未安装请 ...
- Laravel大型项目系列教程(二)之用户管理
Laravel大型项目系列教程(二) 一.前言 本节教程将大概实现用户的注册.修改个人信息.管理用户功能 二.Let's go 1.创建用户注册视图 <span style="font ...
- gateway网关_SpringCloud技术指南系列(十二)API网关之Gateway使用
SpringCloud技术指南系列(十二)API网关之Gateway使用 一.概述 API网关是一个更为智能的应用服务器,它的定义类似于面向对象设计模式中的Facade模式,它的存在就像是整个微服务架 ...
- Linux Shell脚本入门教程系列之(二)第一个shell脚本
本文是Linux Shell脚本系列教程的第(二)篇,更多shell教程请看:Linux Shell脚本系列教程 通过上一篇教程的学习,相信大家已经能够对shell建立起一个大体的印象了,接下来,我们 ...
- html5游戏制作入门系列教程(二)
今天,我们继续html5游戏制作入门系列的系列文章.今天,我们将继续基础知识(也许甚至是高级技巧的基础).我要告诉你如何具有渐变颜色填充对象,绘制文本,使用自定义的字体绘制文本,基本的动画,以及最重要 ...
最新文章
- IntelliJ IDEA 2019.3这回真的要飞起来了,新特性抢先看!
- BZOJ.2741.[FOTILE模拟赛]L(分块 可持久化Trie)
- c#中.clear()作用_清单 .Clear()方法以及C#中的示例
- ROS----小乌龟之你追我赶
- 模式识别:聚类分析2020.05.27class
- 3m格式的文件怎么转换成mp3_怎么将电脑上的mp4文件转换成mp3格式
- 失意时,你是怎么救自己的?
- hadoop的伪分布环境配置(2.5.2)
- python 将0矩阵转换为none列表_在学习线性代数时所探索的Python运用
- 建造者2全部岛屿_勇者斗恶龙建造者2空荡岛流程攻略介绍
- Ubuntu中的截图工具
- 推荐STM32F030K6T6国产兼容替换芯马XM1008K6T6
- 部署基于SAWP的低成本开源CRM系统
- ios应用在设置网络权限为wifi和数据后会被还原为关闭
- 三天打鱼两天晒网的直接差距
- 不要996!程序员创建955.WLB不加班公司名单,GitHub周榜第二
- 维修计算机的基本操作论文,《计算机维修与处理选修论文.doc
- 美团和大众点评合并:抱团取暖 1+1能否大于2?---OFweek
- SPSS Modeler18.0数据挖掘软件教程(三):逻辑回归分析
- 好巧,七夕最新8月书单出炉!送给你程序员
热门文章
- atitit 英文与中文与阿拉伯文的简化解决方案.docx
- atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性
- Atitit.论图片类型 垃圾文件的识别与清理 流程与设计原则 与api概要设计 v2 pbj
- 如何评价路孚特的Datastream工具?
- 身份密匙~迷惑的要点——大盘点
- 2018第七届iWeb峰会城市巡回——杭州站
- 【优化算法】白头鹰搜索优化算法(BES)【含Matlab源码 1381期】
- 【图像去噪】基于matlab小波变换+Contourlet变换+PCA图像去噪【含Matlab源码 610期】
- 【语音合成】基于matlab语音信号变调【含Matlab源码 566期】
- 数据转换transform练习