gpt4 book ai didi

android - 带有 Retrofit 2、RxJava 和 RxBinding 的 AutoCompleteTextView

转载 作者:太空狗 更新时间:2023-10-29 13:55:04 27 4
gpt4 key购买 nike

我是 Rx 世界的新手,尝试使用 RxJavaRxBinding 实现我的 AutoCompleteTextView >改造 2

这是我想出的麻烦:(也许我没有以正确的方式做。)

我有一个 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 ?或者我该如何解决?

最佳答案

您确实可以使用 unsubscribe(),但根据您设置值的方式,您还可以使用 skipWhile。这是一个例子:

public void handleTextChanges() {
final String textFromSource = "an";

Observable.fromArray("a", "an", "ancestor")
.skipWhile(new Predicate<String>() {
@Override
public boolean test(String value) throws Exception {
return textFromSource.contains(value);
}
})
.subscribe(new Consumer<String>() {
@Override
public void accept(String value) throws Exception {
Log.d("Rx", value);
}
});
}

这只会消耗 ancestor(示例是 RxJava2,但存在相同的方法)。任何后续值,即使它们与 an 匹配,都将被使用。如果你总是想像这样进行检查,你可以使用 filter

关于android - 带有 Retrofit 2、RxJava 和 RxBinding 的 AutoCompleteTextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40577389/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com