android - 字符串值更改时 RxAndroid 更新字段/ TextView

标签 android observer-pattern rx-java rx-android

我刚刚开始使用 RxJava/RxAndroid,我想知道我是否可以用它来解决以下问题。基本上,给定一个字段,比如一个 TextView 和一个值,一个字符串,我正在寻找一种方法来在字符串的值发生变化时自动更新 TextView 。我不确定我将如何将其实现为 Observable。让我演示一下;

String str = "Test"; //the string value
TextView textView = (TextView) findViewById(R.id.textView); //the textview

Observable o = //looking for this part. Want to observe the String str

o.subscribe(new Observer<String>() { //subscribe here looking for string changes

            @Override
            public void onCompleted() {
                System.out.println("Completed");
            }

            @Override
            public void onError(Throwable e) {
            }

            @Override
            public void onNext(String s) {
                textView.setText(s); //update the textview here
            }

        });

//here is where the string changes, it could be hardcoded, user input, or   
//anything else really, I just want the textview to be updated automatically 
//without another setText

str = "Different String"; 

RxAndroid/RxJava 可以实现我正在寻找的东西吗?

最佳答案

实现该目标的最简单方法是使用任何类型的 Subject,可能是 BehaviorSubjectPublishSubject。一个 Subject 既是一个 Subscriber(所以你可以用 onNext 给它赋值)也是一个 Observable(所以你可以订阅它)。在这里查看差异的解释:http://reactivex.io/documentation/subject.html

所以,而不是

String str = "Test";

你会

BehaviorSubject<String> stringSubject = BehaviorSubject.<String>create("Test");

然后您可以直接订阅 stringObservable

而不是像这样为您的变量分配一个新值:

str = "Hello World!";

你会做

stringSubject.onNext("Hello World!");

哦,永远不要将 onError 留空 - 这样做会悄悄地吞掉之前可能发生的任何异常,您会坐下来想知道为什么什么都没有发生。至少写 e.printStacktrace()

关于android - 字符串值更改时 RxAndroid 更新字段/ TextView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31417906/

相关文章:

Fragment 到 Activity 通信的 Android 最佳实践

java - RxJava : How to . 压缩两个 Observable,然后 .merge 它们并最终 .reduce 以聚合所有结果

android - 改造错误: Expected BEGIN_OBJECT but was BEGIN_ARRAY

java - RxJava : How to unit test that an Observable is observed on and subscribed on the right scheduler?

安卓流媒体屏幕

android - 如何在 ubuntu 的 eclipse Juno 中设置 NDK?

android - 键盘打开时纵向模式被误解为横向

python - 使用 ipywidgets 中的小部件的观察者模式

c++ - 在 C++ 中修复观察者设计模式

design-patterns - [GoF]-ConcreteSubject 可以覆盖通知方法吗?