2015-12-15 15 views
8

tôi đã sử dụng rxandroid cho hoạt động debounce trên một tìm kiếm EditTextsự kiện TextView RxAndroid gọi tự động trước các sự kiện thay đổi văn bản

tôi đã sử dụng

private void setUpText() { 
     _mSubscription = RxTextView.textChangeEvents(searchStation)// 
       .debounce(500, TimeUnit.MILLISECONDS)// default Scheduler is Computation 
       .observeOn(AndroidSchedulers.mainThread())// 
       .subscribe(getOps().getdata()); 
    } 

và quan sát viên như

public Observer<TextViewTextChangeEvent> getdata() 
    { 

     return new Observer<TextViewTextChangeEvent>() { 
      @Override 
      public void onCompleted() { 

      } 

      @Override 
      public void onError(Throwable e) { 
       e.printStackTrace(); 
      } 

      @Override 
      public void onNext(TextViewTextChangeEvent onTextChangeEvent) { 
//    stationsugession(onTextChangeEvent.text().toString()); 

       //here i called link to get the data from the server 
      } 
     }; 
    } 

Vấn đề của tôi là liên kết được gọi ngay cả trước khi bất kỳ thay đổi edittext nào xảy ra. Và nó không gọi các sự kiện textchange. Tôi có thiếu điều gì đó Tôi đang làm gì sai ở đây. Tôi mới dùng rxandroid và rxjava.

tôi đã sử dụng

compile 'io.reactivex:rxandroid:1.1.0' 
    compile 'io.reactivex:rxjava:1.1.0' 
    compile 'com.jakewharton.rxbinding:rxbinding:0.2.0' 

EDIT:

tại Nó hoạt động bây giờ, tôi đã nhận được một con trỏ null trong logic của tôi để có được danh sách .. khi tôi sử dụng phương pháp onerror và đặt một stacktrace tôi tìm thấy vấn đề.

Và nếu bạn muốn bỏ qua cuộc gọi ban đầu thì chúng tôi nên gọi .skip (1) cho đối tượng đăng ký của bạn. [Nhờ Daniel Lew]

Đoạn mã trên đang làm việc một cách hoàn hảo tại

+0

nội dung của TextViewChangeEvent là gì? –

+0

TextViewTextChangeEvent là một lớp bên trong com.jakewharton.rxbinding: rxbinding để nhận các sự kiện edittext tôi đoán –

+0

Tôi biết. Điều gì được trả về khi bạn gọi 'onTextChangeEvent.text()' và đăng nhập kết quả? –

Trả lời

38

RxTextView.textChanges() phát ra các giá trị văn bản hiện hành của TextView trước khi phát ra bất kỳ thay đổi. Xem the documentation.

Nếu bạn chỉ muốn debounce những thay đổi, sau đó bạn nên thêm skip(1), mà sẽ bỏ qua các phát thải ban đầu:

_mSubscription = RxTextView.textChangeEvents(searchStation) 
    .skip(1) 
    .debounce(500, TimeUnit.MILLISECONDS) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(getOps().getdata()); 
+0

nhờ đó là thông tin tuyệt vời –

+0

Tôi cũng đã sử dụng: RxTextView.textChangeEvents (searchStation) .filter {! It.text(). IsEmpty()} –

+6

Trong rxBinding2 (ít nhất) bạn có thể sử dụng .skipInitialValue() – xklakoux

Các vấn đề liên quan