RxJava 和 RxAndroid 四(RxBinding的使用)
对Rxjava不熟悉的同学可以先看我之前写的几篇文章
RxJava 和 RxAndroid 一 (基础)
RxJava 和 RxAndroid 二(操作符的使用)
RxJava 和 RxAndroid 三(生命周期控制和内存优化)
另外推荐几篇比较好的文章,有助于理解Rxjava
安卓客户端是如何使用 RxJava 的
通过 RxJava 实现一个 Event Bus – RxBus
玩透RxJava(一)基础知识
RxJava 教程第二部分:事件流基础之 过滤数据
Meizhi Android之RxJava & Retrofit最佳实践
前言:RxBinding 是 Jake Wharton 的一个开源库,它提供了一套在 Android 平台上的基于 RxJava的 Binding API。所谓 Binding,就是类似设置 OnClickListener 、设置 TextWatcher 这样的注册绑定对象的 API。
一:git地址
https://github.com/JakeWharton/RxBinding
二、androidStudio 使用
一般的包下面就用
compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'
v4'support-v4' library bindings:
compile 'com.jakewharton.rxbinding:rxbinding-support-v4:0.4.0'
'appcompat-v7' library bindings:
compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:0.4.0'
'design' library bindings:
compile 'com.jakewharton.rxbinding:rxbinding-design:0.4.0'
三、代码示例
Button 防抖处理
button = (Button) findViewById( R.id.bt ) ; RxView.clicks( button )
.throttleFirst( 2 , TimeUnit.SECONDS ) //两秒钟之内只取一个点击事件,防抖操作
.subscribe(new Action1<Void>() {
@Override
public void call(Void aVoid) {
Toast.makeText(MainActivity.this, "点击了", Toast.LENGTH_SHORT).show();
}
}) ;
按钮的长按时间监听
button = (Button) findViewById( R.id.bt ) ; //监听长按时间
RxView.longClicks( button)
.subscribe(new Action1<Void>() {
@Override
public void call(Void aVoid) {
Toast.makeText(MainActivity.this, "long click !!", Toast.LENGTH_SHORT).show();
}
}) ;
listView 的点击事件、长按事件处理
listView = (ListView) findViewById( R.id.listview ); List<String> list = new ArrayList<>() ;
for ( int i = 0 ; i < 40 ; i++ ){
list.add( "sss" + i ) ;
} final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1 );
adapter.addAll( list ); listView.setAdapter( adapter ); //item click event
RxAdapterView.itemClicks( listView )
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
Toast.makeText(ListActivity.this, "item click " + integer , Toast.LENGTH_SHORT).show();
}
}) ; //item long click
RxAdapterView.itemLongClicks( listView)
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
Toast.makeText(ListActivity.this, "item long click " + integer , Toast.LENGTH_SHORT).show();
}
}) ;
- 用户登录界面,勾选同意隐私协议,登录按钮就变高亮
button = (Button) findViewById( R.id.login_bt );
checkBox = (CheckBox) findViewById( R.id.checkbox );
RxCompoundButton.checkedChanges( checkBox )
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
button.setEnabled( aBoolean );
button.setBackgroundResource( aBoolean ? R.color.button_yes : R.color.button_no );
}
}) ;
```
效果图
搜索的时候,关键词联想功能 。debounce()在一定的时间内没有操作就会发送事件。
editText = (EditText) findViewById( R.id.editText );
listView = (ListView) findViewById( R.id.listview ); final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1 );
listView.setAdapter( adapter ); RxTextView.textChanges( editText )
.debounce( 600 , TimeUnit.MILLISECONDS )
.map(new Func1<CharSequence, String>() {
@Override
public String call(CharSequence charSequence) {
//get the keyword
String key = charSequence.toString() ;
return key ;
}
})
.observeOn( Schedulers.io() )
.map(new Func1<String, List<String>>() {
@Override
public List<String> call(String keyWord ) {
//get list
List<String> dataList = new ArrayList<String>() ;
if ( ! TextUtils.isEmpty( keyWord )){
for ( String s : getData() ) {
if (s != null) {
if (s.contains(keyWord)) {
dataList.add(s);
}
}
}
}
return dataList ;
}
})
.observeOn( AndroidSchedulers.mainThread() )
.subscribe(new Action1<List<String>>() {
@Override
public void call(List<String> strings) {
adapter.clear();
adapter.addAll( strings );
adapter.notifyDataSetChanged();
}
}) ;
运行效果
总结:
RxBinding
就是把发布--订阅
的模式用在了android控件的点击,文本变化上。通过 RxBinding 把点击监听转换成 Observable 之后,就有了对它进行扩展的可能。RxBinding
和rxlifecycle
结合起来使用,可以控制控件监听的生命周期。关于rxlifecycle
的使用,请参照RxJava 和 RxAndroid 三(生命周期控制和内存优化)这个系列的代码示例都在 github https://github.com/zyj1609wz/RxJava_RxAndroid
最后我的个人微信公众号是:
zhaoyanjun125
, 欢迎关注
- RxJava 和 RxAndroid 五(线程调度)
RxJava 和 RxAndroid 四(RxBinding的使用)的更多相关文章
- RxJava 和 RxAndroid 五(线程调度)
对rxJava不了解的同学可以先看 RxJava 和 RxAndroid 一 (基础)RxJava 和 RxAndroid 二(操作符的使用)RxJava 和 RxAndroid 三(生命周期控制和内 ...
- RxJava 和 RxAndroid 三(生命周期控制和内存优化)
rxjava rxandroid 赵彦军 前言:对Rxjava.Rxandroid不了解的同学可以先看看 RxJava 和 RxAndroid RxJava 和 RxAndroid 二(操作符的使用) ...
- RxJava和RxAndroid
现在RxJava和RxAndroid越来越火爆,自己在业余时间也学习了一下,感觉确实很好用,之前 为了完成页面刷新,数据请求,组件信息传递的时候,要使用handler,真的是逻辑思路很强,稍微不注意, ...
- [Android]基于RxJava、RxAndroid的EventBus实现
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4578699.html Github:https://gith ...
- RxJava 和 RxAndroid 二(操作符的使用)
前言:对Rx不了解的朋友可以先看我的第一篇博文 RxJava 和 RxAndroid 一 (基础),是对Rxjava的基本介绍 1.merge操作符,合并观察对象 List<String> ...
- RxJava 和 RxAndroid 一 (基础)
1.RxJava 项目地址 https://github.com/ReactiveX/RxJava 2.RxAndroid 项目地址 https://github.com/ReactiveX/R ...
- RxJava漫谈-RxAndroid使用
RxJava在github上的地址:https://github.com/ReactiveX/RxJava RxAndroid在github上的地址:https://github.com/Reacti ...
- RxJava 和 RxAndroid (生命周期控制和内存优化)
RxJava使我们很方便的使用链式编程,代码看起来既简洁又优雅.但是RxJava使用起来也是有副作用的,使用越来越多的订阅,内存开销也会变得很大,稍不留神就会出现内存溢出的情况,这篇文章就是介绍Rxj ...
- RxJava 2.x 使用最佳实践
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76443347 本文出自[赵彦军的博客] 以前写过 Rxjava 系列教程, 如下所 ...
随机推荐
- MyBaits学习
一:配置MyBaits的开发环境 1.1.核心配置文件 正如hibernate一样,MyBaits也有一个核心的配置文件,它包含着数据源地址,用户名,密码等,还有着各个实体类的配置文件,配置文件是xm ...
- Windows Azure Cloud Service (1) 用户手册
<Windows Azure Platform 系列文章目录> 下载地址 Cloud Service用户手册
- 编译Linux内核
下面的实验以 debian7.5 64bit 为例. 获取源码 获取 debian7.5 本身的源码非常简单: sudo apt-get install linux-source https://ww ...
- 【模式匹配】更快的Boyer-Moore算法
1. 引言 前一篇中介绍了字符串KMP算法,其利用失配时已匹配的字符信息,以确定下一次匹配时模式串的起始位置.本文所要介绍的Boyer-Moore算法是一种比KMP更快的字符串匹配算法,它到底是怎么快 ...
- Dapper学习 - Dapper的基本用法(二) - 存储过程/函数
上一篇貌似少介绍了自定义函数和存储过程, 因为这两个也可以使用查询的方式来实现功能, 这一篇就补上 一.自定义函数的创建和调用 (mysql的) Delimiter $$ drop function ...
- C#基础整理参数
基本概念 把数据传入方法中,可以使方法有多个返回值. 参数的传递 值参数,通过将实参的值复制到形参的方式传递数据.值参数的实参可以是变量或者是表达式
- 基于cookie实现zTree树刷新后,展开状态不变
1.除了引用jQuery和zTree的JS外,引用cookie的JS: <script type="text/javascript" src="~/Scripts/ ...
- asp.net session
简介编辑 session对象用于存储特定的用户会话所需的信息 . Session对象的引入是为了弥补HTTP协议的不足,HTTP协议是一种无状态的协议. Session中文是"会话" ...
- 不可或缺 Windows Native (12) - C++: 引用类型
[源码下载] 不可或缺 Windows Native (12) - C++: 引用类型 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 引用类型 示例CppReferen ...
- 【Java每日一题】20161103
package Nov2016; import java.util.List; public class Ques1103 { public void method01(String[] array) ...