【问题标题】:To implement TextWatcher with RxJava Android使用 RxJava Android 实现 TextWatcher
【发布时间】:2020-06-06 19:31:11
【问题描述】:

我是 RxJava 新手,为了学习一些基础知识,我创建了一个小项目,在其中我试图观察我的 EditText 以了解输入文本的变化并更新 TextView。

代码如下:

这些分别是我的 Observable 和 Observers 的实例变量

private Observable<String> editTextObservable;
private Observer<String> textViewObserver;

我正在使用 RxBinding 并订阅文本更改,如下所示: 我在onCreate()做这个@

RxTextView.textChanges(etData).
            subscribe(new Action1<CharSequence>() {
        @Override
        public void call(CharSequence charSequence) {
            editTextObservable = Observable.create(new ObservableOnSubscribe<String>() {
                @Override
                public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Throwable {
                    Log.d(TAG, "onTextChanged subscribe: " + etData.getText().toString());
                    emitter.onNext(etData.getText().toString());
                }
            });
        }
    });

我正在像这样更新我的 TextView:

textViewObserver = new Observer<String>() {
        @Override
        public void onSubscribe(@NonNull Disposable d) {
            Log.d(TAG, "onSubscribe: ");
        }

        @Override
        public void onNext(@NonNull String value) {
            Log.d(TAG, "onNext: ");
            tvResult.setText(value);
        }

        @Override
        public void onError(@NonNull Throwable e) {
            Log.d(TAG, "onError: ");
        }

        @Override
        public void onComplete() {
            Log.d(TAG, "onComplete: ");

        }
    };

当我运行该应用程序时,它不会给我任何错误,我可以在日志中看到正在调用 onTextChanged() 侦听器,但调用永远不会转到 subscribe() 方法,我无法看到任何结果文本视图。我在这里做错了什么?

【问题讨论】:

  • 是否允许使用扩展库来观察 onTextChange 事件?有一个用于 ui 元素的各种事件的包装器,它将提供一个 observable。
  • @HansWurst 你的意思是 RxBinding?
  • 是的,这就是我的意思。
  • @HansWurst 我用 RxBinding 进行了尝试,但仍然看不到结果。我也更新了问题

标签: android rx-java2 rx-android


【解决方案1】:

使用 RxBinding 库更改文本时观察的示例:

private val compositeDisposable = CompositeDisposable()   

val disposable = editText.textChanges()
                    .map(CharSequence::toString)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe {
                        tvResult.text = it
                    }
     compositeDisposable.add(disposable)

当activity调用onDestroy()或fragment调用onDestroyView()时不要忘记callcompositeDisposable.clear()

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 2017-04-13
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多