前言

  • Rxjava,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎。
Github截图

如果还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava 入门教程

  • RxJava如此受欢迎的原因,在于其提供了丰富 & 功能强大的操作符,几乎能完成所有的功能需求
  • 今天,我将为大家带来 Rxjava创建操作符的常见开发应用场景:联合判断需求 ,希望大家会喜欢。
  1. 本系列文章主要基于 Rxjava 2.0
  2. 接下来的时间,我将持续推出 AndroidRxjava 2.0 的一系列文章,包括原理、操作符、应用场景、背压等等 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记!!
示意图

目录

示意图

1. 需求场景

需要同时对多个事件进行联合判断

如,填写表单时,需要表单里所有信息(姓名、年龄、职业等)都被填写后,才允许点击 "提交" 按钮


2. 功能说明

  • 此处采用 填写表单 作为联合判断功能展示
  • 即,表单里所有信息(姓名、年龄、职业等)都被填写后,才允许点击 "提交" 按钮

3. 具体实现

  • 原理
    采用 RxJava 组合操作符中的combineLatest() 实现

关于组合操作符中的combineLatest() 的使用请看文章::Android RxJava:组合 / 合并操作符 详细教程

  • 具体代码实现

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>                

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 nameObservable = RxTextView.textChanges(name).skip(1);        Observable ageObservable = RxTextView.textChanges(age).skip(1);        Observable jobObservable = RxTextView.textChanges(job).skip(1);        /*         * 步骤3:通过combineLatest()合并事件 & 联合判断         **/        Observable.combineLatest(nameObservable,ageObservable,jobObservable,new Function3() {            @Override            public 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() {            @Override            public void accept(Boolean s) throws Exception {                /*                 * 步骤6:返回结果 & 设置按钮可点击样式                 **/                Log.e(TAG, "提交按钮是否可点击: "+s);                list.setEnabled(s);            }        });
  • 测试结果
示意图

4. Demo地址

Carson_Ho的Github地址 = RxJava2实战系列:联合判断


5. 总结

  • 本文主要讲解了 Rxjava的实际开发需求场景:联合判断
  • 下面我将结合 实际场景应用 & Rxjava的相关使用框架(如RetrofitEventbus ,继续对 AndroidRxjava 的实际开发需求场景进行深入讲解
示意图

感兴趣的同学可以继续关注本人运营的Wechat Public Account

  • 我想给你们介绍一个与众不同的Android微信公众号(福利回赠)
  • 我想邀请您和我一起写Android(福利回赠)

请点赞!因为你的鼓励是我写作的最大动力!

相关文章阅读

  • 操作符使用
    Android:这是一篇 清晰 & 易懂的Rxjava 入门教程
    Android RxJava:最基础的操作符详解 - 创建操作符
    Android RxJava:图文详解 变换操作符
    Android RxJava:组合 / 合并操作符 详细教程
    Android RxJava:功能性操作符 全面讲解
  • 实际应用讲解
    Android RxJava 实际应用讲解:(无条件)网络请求轮询
    Android RxJava 实际应用讲解:(有条件)网络请求轮询
    Android RxJava 实际应用讲解:网络请求嵌套回调
    Android RxJava 实际应用讲解:合并数据源
    Android RxJava 实际应用讲解:从磁盘 / 内存缓存中 获取缓存数据
    Android RxJava 实际应用讲解:联合判断
    Android RxJava:细说 线程控制(切换 / 调度 )(含Retrofit实例讲解)
    Android RxJava 实际应用讲解:网络请求出错重连(结合Retrofit)

欢迎关注Carson_Ho的!

不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度

更多相关文章

  1. htc android操作
  2. 【Android】内嵌数据库IDE(可视化操作类)
  3. Android(安卓)open failed: EBUSY (Device or resource busy)
  4. Android(安卓)通过读取本地Arp表获取当前局域网内其他设备信息
  5. Android(安卓): 联系人 Turtorial
  6. 雷牛满面:Baidu 推出自己的移动操作系统
  7. Android捕获全局异常信息并实现上传
  8. Android启动界面之SplashActivity的设计
  9. Android(安卓)studio 不用数据线调试真机

随机推荐

  1. Android(安卓)ExpandableListView使用小
  2. Android(安卓)查询联系人姓名和号码
  3. How to Run Android(安卓)Applications o
  4. Android(安卓)TextView获取某一行文字
  5. android 入门 006(sqlite增删改查)
  6. Android(安卓)SAX解析XML文件
  7. Android的Textview里面夹杂图片
  8. Android常用控件之RecyclerView
  9. Android(安卓)使用MediaPlayer 播放 视频
  10. Android语音识别简单示例