我是新來Rx
世界,並試圖實現我AutoCompleteTextView
與RxJava
,RxBinding
和Retrofit 2
。AutoCompleteTextView與改造2,RxJava和RxBinding
這是我想出這是很麻煩:(也許我沒有做正確的方式)
我有一個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
?或者我該如何解決這個問題?
的問題是檢查,當你設置的文本時,可觀察到發射的情況下,嘗試退訂設置文本之前,之後重新訂閱。 – AndroidRuntimeException
是的,就這麼簡單!謝謝@AgustinSivoplás。 –
很高興幫助!祝一切順利! – AndroidRuntimeException