1. 程式人生 > >Android RxJava操作符的學習---過濾操作符----聯想搜尋優化

Android RxJava操作符的學習---過濾操作符----聯想搜尋優化

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事件作出響應");
                    }
                });
  • 測試結果