转载请注明出处:王亟亟的大牛之路

最近下班回家都在WOW,周末就爆肝,感觉人都要GO DIE了,昨天下午看了看RxBinding相关的功能感觉还是蛮强大的,所提供的API也是相当丰富(基本Rx套餐都是互通的),然后就把之前的Rx例子翻出来重新写一下。

还是老规矩,先安利:

https://github.com/ddwhan0123/Useful-Open-Source-Android(这礼拜在拆资料/博客/学习那模块,之前叠的有点多,还在分割)


什么是RxBinDing?有什么作用?(网上相关的介绍也有,我这里整合一下)

JakeWharton 提供了一套在 Android 平台上的基于 RxJava的 Binding API。

类似设置 OnClickListener 、设置 TextWatcher 这样的注册绑定对象的 API。

并对普通的控件,V4,V7等等做了相应的支持。

项目git:

https://github.com/JakeWharton/RxBinding

如何使用依赖RxBinding这里不说了,这里来说下匿名函数的问题

因为谷歌和甲骨文之间搞不清楚所以安卓支持java8的特性需要“特殊操作”,那为什么要用java8特性呢?别的不说,主要是 Lambda,虽说这玩意可读性差,写起来自己绕晕,但是 省代码,省代码,省代码!!

在众多第三方支持插件里,比较推推崇:https://github.com/evant/gradle-retrolambda

理由:不流氓+搭建简单

需要什么?

首先 你得下了java8,没下的话要去下载下,传送门:

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

然后在你的gradle里配置如下(截图是怕有写小伙伴贴错地方):

这样就可以用java 8的新特性了。

因为只演示普通控件,所以就用(按钮啊,文本啊,选择框啊什么的都在里面)

compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'

那就简单的搞个输入框,搞个按钮然后输入内容在TextView里显示就行。

废话不多说,直接上代码

public class MainActivity extends AppCompatActivity {
    Toolbar toolBar;
    EditText edit;
    TextView result;
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        init();
        logic();
    }

    private void init() {
        setSupportActionBar(toolBar);
        toolBar = (Toolbar) findViewById(R.id.toolBar);
        result = (TextView) findViewById(R.id.result);
        edit = (EditText) findViewById(R.id.edit);
        btn = (Button) findViewById(R.id.btn);
    }

    private void logic() {
        toolBar.setTitle("RxAndroidDemo");

        saveText();
        reFreshText();
    }

    private void reFreshText() {
        RxTextView.afterTextChangeEvents(edit).subscribe(textViewAfterTextChangeEvent -> {
            result.setText(textViewAfterTextChangeEvent.editable().toString());
        });
    }

    private void saveText() {
        RxView.clicks(btn)
//                .subscribeOn(Schedulers.io())
//                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Void>() {
                    @Override
                    public void onCompleted() {
                        result.setText(SharePreferencesTools.getString(MainActivity.this, "user") + " now ");

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(Void aVoid) {
                        SharePreferencesTools.putString(MainActivity.this, "user", edit.getText().toString().trim());
                        onCompleted();
                    }
                });
    }
}

这边的Demo并没有用注解获取对象,实际上组合拳套餐会用的更舒服点,毕竟有插件一键find。

我们这些”RxView”的行为还是要在onCreate里执行了(尽管用户不点不触发,但是你还得像平时setListener那样先把行为注册掉)

EditText用RxTextView,其他一些还是用RxView.

api提供了 诸如textChanges ,afterTextChangeEvents等一系列替代之前回调的方法,进一步摆脱“回调地狱”。

因为是Rx套餐,所以那些线程行为,异步行为,.map() .first()等等等方法都可以用

这边提再一个“优化”的问题

  • 当你逻辑结束了不用了,之前订阅的被观察者与观察者的关系请做取消订阅操作,调用 unsubscribe()就行

源码地址:

https://github.com/ddwhan0123/RxAndroidDemo/tree/master/RxAndroidGlideDemo

补几个资料,大家也可以看看:

http://www.cnblogs.com/zhaoyanjun/p/5523454.html

http://hanks.xyz/2015/11/29/rx_ux/

初涉Rx套餐 之RxBinding(让你的事件流程更清晰)的更多相关文章

  1. RxJava RxBinding RxView 控件事件 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. Python爬取CSDN博客文章

    0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...

  3. android-------- 常用且应该学习的框架

    今天来分享一下一些常用的库,在Github 上 star数也是很高的,开发中也是很常用的: 简单的分享一下,一起学习. http://www.xiufm.com/blog-1-944.html 框架名 ...

  4. 2017年Android百大框架排行榜

    框架:提供一定能力的小段程序 >随意转载,标注作者"金诚"即可 >本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. >本文已经开源到Gith ...

  5. android 优秀框架整理

    程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这里我进行了一下整理,这样可以使我们在使用到时快速的查找到,希望对大家有所帮助! 1. ...

  6. 2017年Android百大框架排行榜(转)

    一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由.网络层.UI层.通信层或其他单一功能的框架 混合开发框架:提供开发hybrid app.h5与webview结合能力.web app能力的框架 ...

  7. Rx系列---响应式编程

    Rx是ReactiveX的简称,翻译过来就是响应式编程 首先要先理清这么一个问题:Rxjava和我们平时写的程序有什么不同.相信稍微对Rxjava有点认知的朋友都会深深感受到用这种方式写的程序和我们一 ...

  8. Android App 开发技能图谱

    操作系统 Windows/MacOSX/Linux 编程语言 Java HTML/JS (Hybrid/Web App) C/C++ (NDK) SQL (DB) Kotlin 开发工具 IDE An ...

  9. RxJava简介

    RxJava简介 本文为前段时间学习RxJava时留下的历史遗留笔记,仅作纪念,科学的大神教学帖子在这里-> 给 Android 开发者的 RxJava 详解 通过链式调用序列实现基于事件流的异 ...

随机推荐

  1. poj 2752 Seek the Name, Seek the Fame (KMP纯模版)

    Seek the Name, Seek the Fame Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13840   Ac ...

  2. 【BZOJ3673/3674】可持久化并查集/可持久化并查集加强版 可持久化线段树

    [BZOJ3674]可持久化并查集加强版 Description Description:自从zkysb出了可持久化并查集后……hzwer:乱写能AC,暴力踩标程KuribohG:我不路径压缩就过了! ...

  3. java的poi导入excel时解析日期

    if (r.getCellType()==Cell.CELL_TYPE_NUMERIC){ if(HSSFDateUtil.isCellDateFormatted(r)){ //用于转化为日期格式 D ...

  4. java的list去重

    Set<EmployeeInfoDTO> empSet = new HashSet<EmployeeInfoDTO>(empListAll);List<EmployeeI ...

  5. 综合: Java 对象初始化过程

    class Fu { Fu() { show(); } void show() { System.out.println("xixi"); } } class Zi extends ...

  6. 我的Android进阶之旅------>解决Android Studio报错:DefaultAndroidProject : Unsupported major.minor version 52.0

    问题描述 今天使用Android Studio 2.0打开我之前的项目时,编译报了如下错误: Error:Cause: com/android/build/gradle/internal/model/ ...

  7. weal woe

    He is worth no weal that can bide no woe. 禁不起吃苦的人不配得到幸福 有句谚语叫No weal without woe 福兮祸所伏 ; 祸兮福所倚 weal和 ...

  8. Python3+Selenium3自动化测试-(三)

    selenium键盘事件 #coding=utf-8 from selenium import webdriver import time from selenium.webdriver.common ...

  9. [StringUtil ] isEmpty VS isBlank

    昨天才意识到这两个的存在. Blank(空字符串 blank) StringUtils.isNoneBlank(null) = false StringUtils.isNoneBlank(null, ...

  10. java.text.SimpleDateFormat使用介绍

    java.text.SimpleDateFormat的使用 java.lang.Object   |   +----java.text.Format           |           +-- ...