2017-12-12 2 views
0

Ich versuche, .distinctUntilChanged() zu verwenden und seinen Wert nicht nach switchmap() nach dem ersten Mal zu übergeben.Rxjava2 distinctUntilChanged() funktioniert nicht richtig nach dem ersten Mal

RxTextView.textChanges(etUserQuery).debounce(300, TimeUnit.MILLISECONDS) 
    .observeOn(AndroidSchedulers.mainThread()).filter(charSequence -> { 
     if (charSequence.toString().isEmpty()) { 
      etUserQuery.setHint("Please type username"); 
       return false; 
      } else 
       return true; 
     }).distinctUntilChanged() 
     .switchMap(charSequence -> vm.dataFromNetwork(charSequence.toString())) 
     .subscribe(fetchUserResponce -> { 
      noDataText.setVisibility(fetchUserResponce.getItems().size() == 0 ? View.VISIBLE : View.GONE); 
      mUsersListAdapter.updateData(fetchUserResponce.getItems()); 
     })); 

Ist es korrekt zu verwenden .distinctUntilChanged()?

+1

Die 'CharSequence' die textChanges gibt Ihnen Mutable und sollte in' String' umgewandelt werden, bevor es weitergegeben wird. – akarnokd

+0

Vielen Dank. Ich habe gerade '.map (CharSequence :: toString)' hinzugefügt und ich denke, es funktioniert. –

+0

Also 'distinctUntillChanged()' funktioniert nur für unveränderliche emittiert? Kannst du bitte Erklären. @akarnokd –

Antwort

1

Aus den Kommentaren:

Die CharSequence die textChanges geben Sie wandelbar sind und sollen in String gedreht werden, bevor es entlang geführt wird.

textChanges gibt Ihnen die gleiche CharSequence Referenz und distinctUntilChange auf Object.equals() angewiesen wird es gleich selbst die ganze Zeit finden.

Verwandte Themen