2

我刚刚开始使用 RxJava/RxAndroid,我想知道是否可以使用它来解决以下问题。基本上,给定一个字段,比如一个文本视图和一个值,一个字符串,我正在寻找一种在字符串值发生变化时自动更新文本视图的方法。我不确定我将如何将其实现为 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 是否可行?

4

1 回答 1

12

最简单的方法是使用任何类型的Subject,可能是 aBehaviorSubject或 a PublishSubject。ASubject既是 a Subscriber(因此您可以使用 将值放入其中onNext)和 an 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()

于 2015-07-15T06:52:52.637 回答