2016-10-04 4 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

관련 문제