2017-12-12 12 views
0

.distinctUntilChanged()を使用しようとしていて、初めて値の後にswitchmap()に値を渡しません。Rxjava2 distinctUntilChanged()が初めて初めて正しく動作しない

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()); 
     })); 

.distinctUntilChanged()を使用するのは正しいですか?コメントから

+1

textChangesが提供する 'CharSequence'は変更可能で、渡される前に' String'に変換される必要があります。 – akarnokd

+0

ありがとうございました。私は '.map(CharSequence :: toString)'を追加しました。 –

+0

したがって、 'distinctUntillChanged()'は不変の発光に対してのみ機能しますか?あなたは説明していただけますか? @akarnokd –

答えて

1

CharSequencetextChangesあなたは変更可能で、それが一緒に渡される前にStringにオンにする必要がありいます。

textChangesは、Object.equals()に頼ると、それ自体が常に同じであることがわかるでしょう。同じCharSequence参照とdistinctUntilChangeがあります。

関連する問題