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

最近下班回家都在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. CocoaPods安装和使用教程Code4App LOGO

    本文转载至 http://code4app.com/article/cocoapods-install-usage Code4App 原创文章.转载请注明出处:http://code4app.com/ ...

  2. Java每日一题

    1.(单选题)What will be printed when you execute the following code? class C { C() { System.out.print(&q ...

  3. iOS-UISearchBar去掉边线

    解决办法: UISearchBar 去除边线 属性search.searchBarStyle = minimal 即可

  4. 160624、Spark读取数据库(Mysql)的四种方式讲解

    目前Spark支持四种方式从数据库中读取数据,这里以Mysql为例进行介绍. 一.不指定查询条件 这个方式链接MySql的函数原型是: 1 def jdbc(url: String, table: S ...

  5. Oracle中sql相关的命令

    1.创建用户 SQL> -- 例如创建一个用户名为xiaoming,密码为a123的用户 SQL> create user xiaomingidentified by a123; 用户已创 ...

  6. Oracle database精装版11gR2入门详细连接教程

    对于11g本身比较简单,适合学习者使用,对电脑要求相对较低. 自己一个人单机学习使用. 工具/原料   Oracle Database Express Edition 11g Release 2安装包 ...

  7. Spoken English Practice(not always estimating your status in other's hearts. you will lose yourself when you live in other's look. do your best and walk on you own way.)

    绿色:连读:                  红色:略读:               蓝色:浊化:               橙色:弱读     下划线_为浊化 口语蜕变(2017/7/8) 英 ...

  8. The OpenCV Coding Style Guide

    https://github.com/opencv/opencv/wiki/Coding_Style_Guide

  9. IIS设置文件 App_Offline.htm 网站维护

    在ASP.NET 2.0 站点根目录下,只要存在 App_Offline.htm 文件,那么所有对.aspx的请求都将转向App_Offline.htm .而且浏览器的地址栏显示的是所请求的.aspx ...

  10. Linux内核学习资料

    1.为什么计算机的学生要学习Linux开源技术 http://tinylab.org/why-computer-students-learn-linux-open-source-technologie ...