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操作符的学习---组合合并操作符---联合判断多个事件相关推荐

  1. Android RxJava操作符的学习---组合 / 合并操作符

    3.3 组合 / 合并操作符 3.3.1. 作用 组合 多个被观察者(Observable) & 合并需要发送的事件 应用场景 组合多个被观察者 合并多个事件 发送事件前追加发送事件 统计发送 ...

  2. Android RxJava操作符的学习---组合合并操作符---合并数据源并展示

    1. 需求场景 2. 功能说明 即,同时向2个数据源获取数据 -> 合并数据 -> 统一展示到客户端 3. 具体实现 此处采用Merge() & Zip()操作符进行讲解,其中: ...

  3. Android RxJava操作符的学习---组合合并操作符---从磁盘或内存缓存中获取缓存数据

    1. 需求场景 2. 功能说明 对于从磁盘 / 内存缓存中 获取缓存数据 的功能逻辑如下: 3. 具体实现 详细请看代码注释 // 该2变量用于模拟内存缓存 & 磁盘缓存中的数据String ...

  4. android 多个绑定事件,Android RxJava 实际应用讲解:联合判断多个事件

    前言 Rxjava,由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. Github截图 RxJava如此受欢迎的原因,在于其提供了丰富 & ...

  5. Android RxJava操作符的学习---条件 / 布尔操作符

    3.6 条件 / 布尔操作符 3.6.1. 作用 通过设置函数,判断被观察者(Observable)发送的事件是否符合条件 3.6.2. 类型 RxJava2中,条件 / 布尔操作符的类型包括: 下面 ...

  6. Android :RxJava学习笔记之合并操作符

    RxJava --合并操作符 合并操作符 1.concat() / concatArray() 2.merge() / mergeArray() 3.concatDelayError() / merg ...

  7. RxJava进阶一(创建类操作符)

    RxJava进阶一(创建类操作符) RxJava进阶二(转换类操作符) RxJava进阶三(过滤类操作符) RxJava进阶四(组合类操作符) 前面已经对RxJava原理进行介绍,相信大家对于RXJa ...

  8. Android RxJava应用:优雅实现网络请求轮询(无条件)

    前言 Rxjava,由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. 今天,我将为大家带来 Rxjava创建操作符的常见开发应用场景:轮询需求 ...

  9. Android RxJava操作符的学习---功能性操作符

    3.4 功能性操作符 作用 辅助被观察者(Observable) 在发送事件时实现一些功能性需求 实际应用场景 连接(订阅) 观察者 & 被观察者 线程调度(切换) 错误处理 事件生命周期操作 ...

最新文章

  1. 防止标题或者特定内容长度溢出wordcut
  2. 相关的类代表的颜色和文本对齐方式
  3. Python—进程、线程、协程
  4. Python3之文件的读、写、修改操作
  5. 华为悬红“奥林帕斯奖”,促进数据产业基础技术研究与生态建设
  6. UnityShader30:预编译指令multi_complie和shader_feature
  7. larveral开发api源码 php_PHP数据库驱动扩展概述与不同方式连接数据库总结
  8. java实战——照片编辑器
  9. Vue实现省市区信息选择(附前端源码)
  10. 还记得爆火的图解算法吗?现在图解机器学习算法书来了!送书10本!
  11. Spring boot 与 Spring MVC
  12. 传染病模型SIS及相应的matlab代码
  13. 数据分析学习总结笔记06:T检验的原理和步骤
  14. VB.NET转C# Constants.vbCrLf替换
  15. 复习笔记1-java基础
  16. Mac上用spotlight搜索输入几个字母后闪退
  17. 高德地图我的队伍查岗_高德地图查岗新功能 让你的行踪无所遁形
  18. Dr_can Kalman Filter学习笔记(三)
  19. 计算机类期刊 SCI 、EI 收录,核心期刊目录
  20. 数据库show的用法

热门文章

  1. 剑指 Offer II 047. 二叉树剪枝
  2. win7电脑恢复系统设置或计算机点不了,Win7系统出现故障怎么恢复出厂设置?
  3. 第十一章数据仓库和商务智能
  4. PLC学习笔记(二):PLC结构(1)
  5. 互联网日报 | 2月5日 星期五 | 联想再创史上最佳业绩;我国网民规模达9.89亿;杰夫·贝佐斯将卸任亚马逊CEO...
  6. 微秒级 TCP 时间戳
  7. UltraISO使用步步通
  8. QCryptographicHash实现哈希值计算,支持多种算法
  9. philips 968 也可以telnet
  10. 如何快速掌握MYSQL?附牛客网精选的50道SQL题目详解【入门推荐】