RxBinding使用指南

關於版本問題

如果是 java 代碼想使用,那麼選擇 https://github.com/JakeWharton/RxBinding/tree/2.2.0

最新的 3.3.0 是 kotlin 實現的。

rxjava 引用

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:

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

Android library bindings:

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:

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

AndroidX library bindings:

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:

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

使用

//複合中斷器
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 防抖處理

mDisposable.add(RxView.clicks(mButton)
                .throttleFirst(2, TimeUnit.SECONDS) //兩秒鐘之內只取一個0點擊事件,防抖操作
                .subscribe(o -> Toast.makeText(RxJavaActivity.this, "點擊了", Toast.LENGTH_SHORT).show()));

按鈕的長按事件

//監聽長按事件
mDisposable.add(RxView.longClicks(mButton)
        .subscribe(o -> Log.e("", "")));

CheckBox事件

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

搜索的時候,關鍵詞聯想功能 。debounce()在一定的時間內沒有操作就會發送事件

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

歡迎關注微信公衆號

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章