Android RxJava操作符的学习---组合合并操作符---联合判断多个事件
1. 需求场景
需要同时对多个事件进行联合判断
如,填写表单时,需要表单里所有信息(姓名、年龄、职业等)都被填写后,才允许点击 "提交" 按钮
2. 功能说明
- 此处采用 填写表单 作为联合判断功能展示
- 即,表单里所有信息(姓名、年龄、职业等)都被填写后,才允许点击 "提交" 按钮
3. 具体实现
- 原理
采用RxJava
组合操作符中的combineLatest()
实现
关于组合操作符中的
combineLatest()
的使用请看文章::Android RxJava:组合 / 合并操作符 详细教程
- 具体代码实现
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><EditTextandroid:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请填写姓名"/><EditTextandroid:id="@+id/age"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请填写年龄"/><EditTextandroid:id="@+id/job"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请填写职业"/><Buttonandroid:id="@+id/list"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="提交"android:enabled="false"/></LinearLayout>
MainActivity.java
/** 步骤1:设置控件变量 & 绑定**/EditText name,age,job;Button list;name = (EditText) findViewById(R.id.name);age = (EditText) findViewById(R.id.age);job = (EditText) findViewById(R.id.job);list = (Button) findViewById(R.id.list);/** 步骤2:为每个EditText设置被观察者,用于发送监听事件* 说明:* 1. 此处采用了RxBinding:RxTextView.textChanges(name) = 对对控件数据变更进行监听(功能类似TextWatcher),需要引入依赖:compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'* 2. 传入EditText控件,点击任1个EditText撰写时,都会发送数据事件 = Function3()的返回值(下面会详细说明)* 3. 采用skip(1)原因:跳过 一开始EditText无任何输入时的空值**/Observable<CharSequence> nameObservable = RxTextView.textChanges(name).skip(1);Observable<CharSequence> ageObservable = RxTextView.textChanges(age).skip(1);Observable<CharSequence> jobObservable = RxTextView.textChanges(job).skip(1);/** 步骤3:通过combineLatest()合并事件 & 联合判断**/Observable.combineLatest(nameObservable,ageObservable,jobObservable,new Function3<CharSequence, CharSequence, CharSequence,Boolean>() {@Overridepublic Boolean apply(@NonNull CharSequence charSequence, @NonNull CharSequence charSequence2, @NonNull CharSequence charSequence3) throws Exception {/** 步骤4:规定表单信息输入不能为空**/// 1. 姓名信息boolean isUserNameValid = !TextUtils.isEmpty(name.getText()) ;// 除了设置为空,也可设置长度限制// boolean isUserNameValid = !TextUtils.isEmpty(name.getText()) && (name.getText().toString().length() > 2 && name.getText().toString().length() < 9);// 2. 年龄信息boolean isUserAgeValid = !TextUtils.isEmpty(age.getText());// 3. 职业信息boolean isUserJobValid = !TextUtils.isEmpty(job.getText()) ;/** 步骤5:返回信息 = 联合判断,即3个信息同时已填写,"提交按钮"才可点击**/return isUserNameValid && isUserAgeValid && isUserJobValid;}}).subscribe(new Consumer<Boolean>() {@Overridepublic void accept(Boolean s) throws Exception {/** 步骤6:返回结果 & 设置按钮可点击样式**/Log.e(TAG, "提交按钮是否可点击: "+s);list.setEnabled(s);}});
- 测试结果
Android RxJava操作符的学习---组合合并操作符---联合判断多个事件相关推荐
- Android RxJava操作符的学习---组合 / 合并操作符
3.3 组合 / 合并操作符 3.3.1. 作用 组合 多个被观察者(Observable) & 合并需要发送的事件 应用场景 组合多个被观察者 合并多个事件 发送事件前追加发送事件 统计发送 ...
- Android RxJava操作符的学习---组合合并操作符---合并数据源并展示
1. 需求场景 2. 功能说明 即,同时向2个数据源获取数据 -> 合并数据 -> 统一展示到客户端 3. 具体实现 此处采用Merge() & Zip()操作符进行讲解,其中: ...
- Android RxJava操作符的学习---组合合并操作符---从磁盘或内存缓存中获取缓存数据
1. 需求场景 2. 功能说明 对于从磁盘 / 内存缓存中 获取缓存数据 的功能逻辑如下: 3. 具体实现 详细请看代码注释 // 该2变量用于模拟内存缓存 & 磁盘缓存中的数据String ...
- android 多个绑定事件,Android RxJava 实际应用讲解:联合判断多个事件
前言 Rxjava,由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. Github截图 RxJava如此受欢迎的原因,在于其提供了丰富 & ...
- Android RxJava操作符的学习---条件 / 布尔操作符
3.6 条件 / 布尔操作符 3.6.1. 作用 通过设置函数,判断被观察者(Observable)发送的事件是否符合条件 3.6.2. 类型 RxJava2中,条件 / 布尔操作符的类型包括: 下面 ...
- Android :RxJava学习笔记之合并操作符
RxJava --合并操作符 合并操作符 1.concat() / concatArray() 2.merge() / mergeArray() 3.concatDelayError() / merg ...
- RxJava进阶一(创建类操作符)
RxJava进阶一(创建类操作符) RxJava进阶二(转换类操作符) RxJava进阶三(过滤类操作符) RxJava进阶四(组合类操作符) 前面已经对RxJava原理进行介绍,相信大家对于RXJa ...
- Android RxJava应用:优雅实现网络请求轮询(无条件)
前言 Rxjava,由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. 今天,我将为大家带来 Rxjava创建操作符的常见开发应用场景:轮询需求 ...
- Android RxJava操作符的学习---功能性操作符
3.4 功能性操作符 作用 辅助被观察者(Observable) 在发送事件时实现一些功能性需求 实际应用场景 连接(订阅) 观察者 & 被观察者 线程调度(切换) 错误处理 事件生命周期操作 ...
最新文章
- 防止标题或者特定内容长度溢出wordcut
- 相关的类代表的颜色和文本对齐方式
- Python—进程、线程、协程
- Python3之文件的读、写、修改操作
- 华为悬红“奥林帕斯奖”,促进数据产业基础技术研究与生态建设
- UnityShader30:预编译指令multi_complie和shader_feature
- larveral开发api源码 php_PHP数据库驱动扩展概述与不同方式连接数据库总结
- java实战——照片编辑器
- Vue实现省市区信息选择(附前端源码)
- 还记得爆火的图解算法吗?现在图解机器学习算法书来了!送书10本!
- Spring boot 与 Spring MVC
- 传染病模型SIS及相应的matlab代码
- 数据分析学习总结笔记06:T检验的原理和步骤
- VB.NET转C# Constants.vbCrLf替换
- 复习笔记1-java基础
- Mac上用spotlight搜索输入几个字母后闪退
- 高德地图我的队伍查岗_高德地图查岗新功能 让你的行踪无所遁形
- Dr_can Kalman Filter学习笔记(三)
- 计算机类期刊 SCI 、EI 收录,核心期刊目录
- 数据库show的用法
热门文章
- 剑指 Offer II 047. 二叉树剪枝
- win7电脑恢复系统设置或计算机点不了,Win7系统出现故障怎么恢复出厂设置?
- 第十一章数据仓库和商务智能
- PLC学习笔记(二):PLC结构(1)
- 互联网日报 | 2月5日 星期五 | 联想再创史上最佳业绩;我国网民规模达9.89亿;杰夫·贝佐斯将卸任亚马逊CEO...
- 微秒级 TCP 时间戳
- UltraISO使用步步通
- QCryptographicHash实现哈希值计算,支持多种算法
- philips 968 也可以telnet
- 如何快速掌握MYSQL?附牛客网精选的50道SQL题目详解【入门推荐】