android rx-Java,RxJava与RxAndroid的学习之路

对Rxjava不熟悉的同学可以先看我之前写的几篇文章

前言:RxBinding 是 Jake Wharton 的一个开源库,它提供了一套在

Android 平台上的基于 RxJava的 Binding API。所谓 Binding,就是类似设置 OnClickListener 、设置

TextWatcher 这样的注册绑定对象的 API。

一:git地址

二、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() {

@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() {

@Override

public void call(Void aVoid) {

Toast.makeText(MainActivity.this, "long click  !!", Toast.LENGTH_SHORT).show();

}

}) ;

listView 的点击事件、长按事件处理listView = (ListView) findViewById( R.id.listview );

List list = new ArrayList<>() ;

for ( int i = 0 ; i 

list.add( "sss" + i ) ;

}

final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1 );

adapter.addAll( list );

listView.setAdapter( adapter );

//item click event

RxAdapterView.itemClicks( listView )

.subscribe(new Action1() {

@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() {

@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() {

@Override

public void call(Boolean aBoolean) {

button.setEnabled( aBoolean );

button.setBackgroundResource( aBoolean ? R.color.button_yes : R.color.button_no );

}

}) ;

```

效果图

rxbindingGIF.gif搜索的时候,关键词联想功能

。debounce()在一定的时间内没有操作就会发送事件。editText = (EditText) findViewById( R.id.editText );

listView = (ListView) findViewById( R.id.listview );

final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1 );

listView.setAdapter( adapter );

RxTextView.textChanges( editText )

.debounce( 600 , TimeUnit.MILLISECONDS )

.map(new Func1() {

@Override

public String call(CharSequence charSequence) {

//get the keyword

String key = charSequence.toString() ;

return key ;

}

})

.observeOn( Schedulers.io() )

.map(new Func1>() {

@Override

public List call(String keyWord ) {

//get list

List dataList = new ArrayList() ;

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>() {

@Override

public void call(List strings) {

adapter.clear();

adapter.addAll( strings );

adapter.notifyDataSetChanged();

}

}) ;

运行效果

rxbinding_edGIF.gif

总结:RxBinding就是把

发布--订阅 的模式用在了android控件的点击,文本变化上。通过 RxBinding 把点击监听转换成 Observable

之后,就有了对它进行扩展的可能。

RxBinding和rxlifecycle 结合起来使用,可以控制控件监听的生命周期。关于rxlifecycle的使用,请参照RxJava 和

RxAndroid 三(生命周期控制和内存优化)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值