2016-10-04 5 views
1

を使用して検索私は、ユーザーの検索を処理し、(最後の文字の後に検索1秒)を入力する上での一時停止に対処するためのdebounce()を使用しています:アンドロイド、RXJava、デバウンス

RxSearchView.queryTextChanges(searchView) 
      .debounce(1, TimeUnit.SECONDS) 
      .subscribe(new Action1<CharSequence>() { 
       @Override 
       public void call(CharSequence charSequence) { 
        presenter.loadUsers(charSequence.toString()); 
       } 
      }); 

ので、ユーザは、すべての文字を削除した場合、それは1秒待ってからリストをロードします。どのように処理してリストを即座にロードできますか?異なるパラメータを持つだけdebounceオペレータが必要とされている、あなたの場合は

RxSearchView.queryTextChanges(searchView) 
     .debounce(1, TimeUnit.SECONDS) 
     .mergeWith(Observable.just("")) // manually tigger onNext with empty search 
     .subscribe(new Action1<CharSequence>() { 
      @Override 
      public void call(CharSequence charSequence) { 
       presenter.loadUsers(charSequence.toString()); 
      } 
     }); 

答えて

1

それを使用して、どのイベントを遅延させることができるかをフィルタリングできます。

RxSearchView.queryTextChanges(searchView) 
    .debounce(new Func1<CharSequence, Observable<CharSequence>>() { 
     @Override 
     public Observable<CharSequence> call(CharSequence charSequence) { 
      if (charSequence.length() == 0) { 
       return Observable.empty(); 
      } else { 
       return Observable.<CharSequence>empty().delay(1, TimeUnit.SECONDS); 
      } 
     } 
    }) 
    .subscribe(new Action1<CharSequence>() { 
     @Override 
     public void call(CharSequence charSequence) { 
      Log.d(MainActivity.class.getSimpleName(), new Date().toGMTString() + " " + charSequence.length() + " :" + charSequence); 
     } 
    }); 
+1

ありがとうございます。 – AlirezaXX

関連する問題