关于版本问题

如果是 java 代码想使用,那么选择 https://github.com/JakeWharton/RxBinding/tree/2.2.0

最新的 3.3.0 是 kotlin 实现的。

rxjava 引用

1
2
3
4
5
6
packagingOptions {
    //Use “exclude” to point at the specific file (or files) that Android Studio is complaining about//
    exclude 'META-INF/rxjava.properties'
}
implementation "io.reactivex.rxjava2:rxjava:2.2.12"
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'

java引用

Platform bindings:

1
implementation 'com.jakewharton.rxbinding2:rxbinding:2.2.0'

Android library bindings:

1
2
3
4
5
implementation 'com.jakewharton.rxbinding2:rxbinding-support-v4:2.2.0'
implementation 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.2.0'
implementation 'com.jakewharton.rxbinding2:rxbinding-design:2.2.0'
implementation 'com.jakewharton.rxbinding2:rxbinding-recyclerview-v7:2.2.0'
implementation 'com.jakewharton.rxbinding2:rxbinding-leanback-v17:2.2.0'

kotlin引用

Platform bindings:

1
implementation 'com.jakewharton.rxbinding3:rxbinding:3.0.0'

AndroidX library bindings:

1
2
3
4
5
6
7
8
implementation 'com.jakewharton.rxbinding3:rxbinding-core:3.0.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-appcompat:3.0.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-drawerlayout:3.0.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-leanback:3.0.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-recyclerview:3.0.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-slidingpanelayout:3.0.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-swiperefreshlayout:3.0.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-viewpager:3.0.0'

Google ‘material’ library bindings:

1
implementation 'com.jakewharton.rxbinding3:rxbinding-material:3.0.0'

使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
//复合中断器
private final CompositeDisposable mDisposable = new CompositeDisposable();

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...code
    //把view 的加入到 复合中断器 中
    Button mButton = findViewById(R.id.mButton);
    mDisposable.add(RxView.clicks(mButton).debounce(500, TimeUnit.MILLISECONDS).subscribe(o -> Log.d("", "")));
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mDisposable.clear();
}

使用场景

Button 防抖处理

1
2
3
mDisposable.add(RxView.clicks(mButton)
                .throttleFirst(2, TimeUnit.SECONDS) //两秒钟之内只取一个0点击事件,防抖操作
                .subscribe(o -> Toast.makeText(RxJavaActivity.this, "点击了", Toast.LENGTH_SHORT).show()));

按钮的长按事件

1
2
3
//监听长按事件
mDisposable.add(RxView.longClicks(mButton)
        .subscribe(o -> Log.e("", "")));

CheckBox事件

1
2
3
4
CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox);
mDisposable.add(RxCompoundButton.checkedChanges(checkBox)
        .subscribe(isChecked -> {
        }));

搜索的时候,关键词联想功能 。debounce()在一定的时间内没有操作就会发送事件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
mDisposable.add(RxTextView.textChanges(editText)
                //在 600 毫秒,没有操作的话,就执行事件
                .debounce(600, TimeUnit.MILLISECONDS)
                .map(o -> {
                    //获取 edit 的值
                    String key = editText.getText().toString();
                    return key;
                })
                .observeOn(Schedulers.io())
                .map(o -> {
                    //获取数据
                    List<String> dataList = new ArrayList<String>();
                    return dataList;
                })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(o -> {
                    //adapter.clear();
                    //adapter.addAll(strings);
                    //adapter.notifyDataSetChanged();
                }));

如果你喜欢我的文章,可以关注我的掘金、公众号、博客、简书或者Github!

简书: https://www.jianshu.com/u/a2591ab8eed2

GitHub: https://github.com/bugyun

Blog: https://ruoyun.vip

掘金: https://juejin.im/user/56cbef3b816dfa0059e330a8/posts

CSDN: https://blog.csdn.net/zxloveooo

欢迎关注微信公众号