我尝试使用.distinctUntilChanged()
,并且在第一次使用后没有将值传递给switchmap()
。
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()
是否正确?
答案 0 :(得分:5)
来自评论:
CharSequence
textChanges
给你的信息是可变的,在传递之前应该转为String
。
textChanges
为您提供相同的CharSequence
引用,依赖distinctUntilChange
的{{1}}会一直发现它等同于自己。