初涉Rx套餐 之RxBinding(让你的事件流程更清晰)

2023-11-12

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

最近下班回家都在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/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 使用同一个侦听器的多个活动

    我有 4 个活动 它们都包含一个 xml 页脚 其中包含 4 个按钮 每个活动一个 我现在想为这些按钮设置 onclicklistener 它是页脚中的自制菜单 问题是 如何使用侦听器以便重用代码 我有两个想法 创建一个实现 onclick
  • Android Camera.takePicture() 有时不返回?

    我正在编写一个Android 拍照应用程序 该代码在 onPreviewFrame byte data Cameracamera 中从预览中获取帧后进行一些处理 问题在于 android hardware Camera 的函数 takePi
  • 虚拟回调接口

    在 Eclipse 为您创建的来自 Google 的示例主从流代码中 片段中包含以下内容 private Callbacks mCallbacks sDummyCallbacks public interface Callbacks pub
  • 如何在 Android 应用程序中隐藏 Flutterwave API 密钥

    我正在构建一个 Android 应用程序 目前正在将 Flutterwave 集成到我的应用程序中以进行支付 建议我永远不要将 Flutterwave API 密钥放在我的应用程序上 那么我该如何隐藏这些键呢 我正在使用 Retrofit
  • 写入 Android UI Automator 输出控制台

    我正在 Android UI Automator 上编写一个小包装器 通常我们可以在控制台看到测试用例的状态 我可以访问它并添加我自己的消息吗 我努力了System out println 但这没有用 有什么办法可以做到这一点吗 您可以使用
  • 4 天后,应用仍未在 Google Play 搜索中编入索引

    我已经在 4 天前在 google play 上发布了我的第一个应用程序 语音到短信 但我仍然无法通过其名称或开发人员名称在搜索中找到我的应用程序 我只能通过包名称或真实应用程序名称 但不带空格 找到我的应用程序 VoiceToSMS 链接
  • 如何在Android中的DataBinding的ViewModel类中获取R.string

    我目前正在使用databinding对于我的 Android 应用程序项目 我想设置error留言在我的CustomTextView from R string txtOldPassWordError并从另一个名为的类中进行设置ViewMo
  • 如何使用 Google 的 GithubBrowserSample 方法在片段之间共享视图模型?

    我对 Android 架构组件的使用非常陌生 因此我决定使用 GithubBrowserSample 来构建我的应用程序来实现我的许多用例 但我有一个问题 我不知道使用这种方法在片段之间共享视图模型的正确方法是什么 我想共享视图模型 因为我
  • 在 NFC 标签扫描期间,onNewIntent() 内的intent.getAction() 为 null

    这是我第一次使用 NFC 标签 我在清单中声明了 NFC 扫描活动
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • 如何清除Android剪贴板?

    我发现的方法都不起作用 这是我尝试过的 1 使用clearPrimaryClip 的方法ClipboardManager class ClipboardManager clipboard ClipboardManager getSystem
  • 使用 DataBinding 测试片段时膨胀类 Fragment 时出错

    有人可以帮我解决这个问题吗 在我的测试中 我想检查登录按钮是否显示在起始页上 今天我已经为这个错误苦苦挣扎了一段时间 我不知道应该如何解决它 我在这里错过了什么 也许这个问题与这个问题有些相似 Espresso 测试失败 并显示 java
  • 如何在android中的谷歌地图上聚焦标记

    我只是想知道我们是否可以关注 Android 应用程序中添加的标记 如果是 怎么办 或者有没有其他方法可以完成这项任务 可以说我使用下面的代码添加了一个标记 map addMarker new MarkerOptions title tit
  • Jetpack Compose:制作全屏(绝对定位)组件

    我怎样才能在全屏渲染树的深处制作一个可组合的 类似于Dialog可组合作品 例如 当用户单击图像时 它会显示该图像的全屏预览 而无需更改当前路线 我可以用 CSS 来做到这一点position absolute or position fi
  • 无需递归即可对可观察结果进行分页 - RxJava

    我有一个非常标准的 API 分页问题 您可以通过一些简单的递归来处理 这是一个捏造的例子 public Observable
  • 以 HTML 格式发送电子邮件

    我想发送 HTML 格式的电子邮件 如下图所示 我怎样才能做到这一点 请帮我 提前致谢 String body new String table tr td br header td tr br br Get b Best Score b
  • XML 配置中的 screenName 不起作用

    我刚刚在我的应用程序中添加了对 Google Analytics 分析 的支持 但我无法
  • onPrepareOptionsMenu 复制 ActionBar 中的项目

    当我使用 onPrepareOptionsMenu 添加菜单项时 该菜单项会在操作栏中复制其自身 我正在使用片段并在主要活动的 ActionBar 中创建初始菜单 如下所示 Override public boolean onCreateO
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • 如何正确处理 ListView 内的 Android EditText 输入?

    在我的应用程序中 我有一个在 a 中添加 删除 编辑记录的活动SortedMap 该活动作为以下活动的延伸实施ListActivity 我已经实现了自定义ArrayAdapter对于收藏品 Every ListView项目 对应于基础记录

随机推荐