【发布时间】:2016-11-13 18:37:53
【问题描述】:
我是Rx 世界的新手,并尝试使用RxJava、RxBinding 和Retrofit 2 来实现我的AutoCompleteTextView。
这是我想出的麻烦:(也许我没有以正确的方式做。)
我有一个AutoCompleteTextView,在这里我创建了我的订阅和可观察对象:
subcription = RxTextView.textChangeEvents(clearableEditText)
.skip(1)
.debounce(400, TimeUnit.MILLISECONDS)
.map(new Func1<TextViewTextChangeEvent, String>() {
@Override
public String call(TextViewTextChangeEvent textViewTextChangeEvent) {
return textViewTextChangeEvent.text().toString();
}
})
.filter(new Func1<String, Boolean>() {
@Override
public Boolean call(String s) {
return s.length() > 2;
}
})
.flatMap(new Func1<String, Observable<List<String>>>() {
@Override
public Observable<List<String>> call(String text) {
return searchService.getAutoCompleteTermsObservable(text)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<String>>() {
@Override
public void onCompleted() {
Log.d("rx", "oncomplete");
}
@Override
public void onError(Throwable e) {
Log.e("rx", e.toString());
}
@Override
public void onNext(List<String> strings) {
Log.d("rx", strings.size()+"");
autoAdapter = new ArrayAdapter<>(MainActivity.this,
android.R.layout.simple_dropdown_item_1line, strings);
clearableEditText.setAdapter(autoAdapter);
clearableEditText.showDropDown();
}
});
我的问题是当我使用 setText() 方法设置我的 EditText 时,它会触发下拉菜单。例如,当我从AutoCompleteTextView 的下拉列表中设置单词以及使用语音输入设置单词时,它会这样做。手动设置时有没有办法避免触发onTextChanged?或者我该如何解决?
【问题讨论】:
-
问题是,当你设置文本时,observable 会发出事件,在设置文本之前尝试取消订阅,然后再订阅。
-
是的,就这么简单!谢谢@Agustin Sivoplás。
-
很高兴为您提供帮助!万事如意!
标签: android retrofit2 rx-android rx-binding rx-java2