Android RxJava操作符的學習---過濾操作符----聯想搜尋優化
阿新 • • 發佈:2018-11-09
1. 需求場景
2. 功能說明
3. 具體實現
- 佈局檔案:activity_filter.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent"> // 用於輸入搜尋的字元 <EditText android:id="@+id/ed" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="輸入搜尋欄位" /> // 用於顯示聯想搜尋的結果 <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
- 主檔案:FilterUsage.java
// 控制元件繫結 EditText ed; TextView tv; ed = (EditText) findViewById(R.id.ed); tv = (TextView) findViewById(R.id.tv); /* * 說明 * 1. 此處採用了RxBinding:RxTextView.textChanges(name) = 對對控制元件資料變更進行監聽(功能類似TextWatcher),需要引入依賴:compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0' * 2. 傳入EditText控制元件,輸入字元時都會發送資料事件(此處不會馬上傳送,因為使用了debounce()) * 3. 採用skip(1)原因:跳過 第1次請求 = 初始輸入框的空字元狀態 **/ RxTextView.textChanges(ed) .debounce(1, TimeUnit.SECONDS).skip(1) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<CharSequence>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(CharSequence charSequence) { tv.setText("傳送給伺服器的字元 = " + charSequence.toString()); } @Override public void onError(Throwable e) { Log.d(TAG, "對Error事件作出響應" ); } @Override public void onComplete() { Log.d(TAG, "對Complete事件作出響應"); } });
- 測試結果