字符串值更改时RxAndroid更新字段/ Textview

时间:2015-07-14 21:42:14

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

我刚刚开始使用RxJava / RxAndroid,我想知道我是否可以用它来解决以下问题。基本上,给定一个Field,比如一个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的可能性吗?

1 个答案:

答案 0 :(得分:12)

实现这一目标的最简单方法是使用任何类型的BehaviorSubject,可能是PublishSubjectSubjectSubscriberonNext(因此您可以使用Observable将值放入其中)和String str = "Test"; (因此您可以订阅它)。请在此处查看差异的解释:http://reactivex.io/documentation/subject.html

所以,而不是

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

你会有

stringObservable

然后,您可以直接订阅str = "Hello World!";

而不是像这样为变量赋值:

stringSubject.onNext("Hello World!");
你会做的

onError

哦,永远不要让e.printStacktrace()空了 - 这样做会悄悄地吞下早先可能发生的任何异常,你会坐下来想知道为什么没有发生任何事情。至少写x5 or x17 or x19 (not x5) or (not x17) or (not x19)