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 系列教程, 如下所 ...
随机推荐
- adb shell 查看系统属性(用来判断特殊的操作系统)
一般来讲,在android程序开发中进行需要判断设备类型和系统版本 1.设备类型判断(android.os.Build.MODEL) 比如判断属于Google Nexus 5,Nexus 7,MIUI ...
- 研究 研究而已 java和.net的HashSet对比
各位看官,,我不是在引发战争,,我只是想知道事情的真想,我源之于,一段代码我需要实现C#和java的两个版本功能,才发现这一个对比.讨论问题的实质,为什么会出现这样的问题.java和C#都很优秀.请大 ...
- SwiftLint——Swift代码检查及自动格式化工具
某软不给力,正在做的UWP项目停工了.官方说法是要等到RS2发布新的VOIP架构,再看看是不是给某软面子.虽然Beta用户中发出了几点愤怒的声音,但是木有用.有用的只能是某软的Skype for bu ...
- 关于MYSQL数据库安装方式及相关设置简要说明
网上关于MYSQL的教程非常多,但都不是最新的,我这里只是针对最新版本的MY SQL 的安装与设置进行一个简要的说明,大部份操作都相同. 以下是按照WINDOWS 64位操作系统+MY SQL 5.6 ...
- If WCF Service side and Client side config is different?!
from stackoverflow http://stackoverflow.com/questions/4879310/when-setting-up-a-wcf-client-and-serve ...
- SRC单一职责原则
一.定义 一个类应该只有一个发生变化的原因. 二.为什么要使用SRC 因为每一个职责都是变化的一个轴线.当需求变化时,这种变化就会反映为类的职责的变化.如果一个类承担了多于一个的职责,那么引起它变化的 ...
- pymssql examples
http://pymssql.org/en/latest/pymssql_examples.html Example scripts using pymssql module. Basic featu ...
- Java关键字用法及区别
abstract 修饰词表明类或者成员方法具有抽象属性, 用于修饰类时 该类为抽象类 用于方法前 该方法为抽象方法. assert 用来进行程序调试 断言预判的意思. boolean 基本数据类型之一 ...
- Java主要知识结构
Java基础(建议看java编程规范): Java语言基础:数据类型,命名规则,权限控制符,注释 操作符:算术操作符,逻辑操作符,关系操作符,移位操作符,按位操作符 流程控制 数组 字符串 Java高 ...
- 跨平台日志清理工具 Log-Cutter v2.0.1 RC-1 发布
Log-Cutter 是JessMA开源组织开发的一个简单实用的日志切割清理工具.对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能.如果用手工方 ...