RxTextView.textChanges(editText)
.map(CharSequence::toString)
.debounce(200, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(input -> {
output = //...do something with input
editText.setText(ouput)
}));
当我setText(output)
循环时。要设置文本,我首先需要删除监听器,然后再次设置监听器。如何使用 RxJava 做到这 一点 ?
当我
setText(output)
循环时。要设置文本,我首先需要删除监听器,然后再次设置监听器。如何使用 RxJava 做到这 一点 ?
为了满足要求,我设法如下扩展RxBinding源代码。
EditableTextViewTextObservable.java
:
public class EditableTextViewTextObservable extends InitialValueObservable<CharSequence> {
private final TextView view;
EditableTextViewTextObservable(TextView view) {
this.view = view;
}
@Override
protected void subscribeListener(Observer<? super CharSequence> observer) {
EditableTextViewTextObservable.Listener listener = new EditableTextViewTextObservable.Listener(view, observer);
observer.onSubscribe(listener);
view.addTextChangedListener(listener);
}
@Override protected CharSequence getInitialValue() {
return view.getText();
}
final static class Listener extends MainThreadDisposable implements TextWatcher {
private final TextView view;
private final Observer<? super CharSequence> observer;
Listener(TextView view, Observer<? super CharSequence> observer) {
this.view = view;
this.observer = observer;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!isDisposed()) {
view.removeTextChangedListener(this);
observer.onNext(s);
view.addTextChangedListener(this);
}
}
@Override
protected void onDispose() {
view.removeTextChangedListener(this);
}
}
}
EditableRxTextView.java
:
public final class EditableRxTextView {
@CheckResult
@NonNull
public static InitialValueObservable<CharSequence> textChanges(@NonNull TextView view) {
return new EditableTextViewTextObservable(view);
}
}
用法 :
EditableRxTextView.textChanges(editText)
.map(CharSequence::toString)
.debounce(200, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(input -> {
output = //...do something with input
editText.setText(ouput)
}));
任何帮助都将得到承认。
每当字符串发生更改时,就会调用。 现在,当我启动新的并通过发送数据时,不会被调用。
我正在尝试实现一个仅将输入限制为大写字符[A-Z0-9]和数字。 我从某篇文章开始使用InputFilter方法。但我在三星Galaxy Tab 2上遇到了一个问题,但在模拟器或Nexus 4上没有。 问题是这样的: 当我键入“A”时,文本显示为“A”很好 现在,当我键入“B”时,文本应该是“AB”,但它给了我“AAB”,这看起来很奇怪 简而言之,它重复字符 以下是我正在使用此代码的代码: 文件代
我有一个EditText-Field,并为它设置了一个OnFocusChangeListener。当它失去焦点时,将调用一个方法,该方法用数据库中的EditText检查EditText的值。如果方法的return-value为true,则显示一个toast并且焦点应该再次回到EditText上。焦点应该总是回到EditText上,键盘应该显示,直到方法的return-value为false。 ed
我正在做Android智能电视应用: > 在中有一个自定义键盘和一个。 当应用程序启动时,焦点转到键盘。 null
在设置输入类型多行时动作完成不工作。 我已经尝试了您在解决方案中提到的每一个代码,但我仍然面临同样的问题。我如何解决它? 如何使用ActionDone按钮(不带Enter按钮)实现多行EditText此答案在我的应用程序中尝试过,但不起作用。