Ric*_*ick 2 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";
Run Code Online (Sandbox Code Playgroud)
我正在寻找RxAndroid/RxJava可能吗?
dav*_*ola 12
实现这一目标的最简单方法是使用任何一种Subject,可能是a BehaviorSubject或a PublishSubject.A Subject既是a Subscriber(所以你可以将值放入其中onNext)和a Observable(所以你可以订阅它).在这里查看差异的解释:http://reactivex.io/documentation/subject.html
所以,而不是
String str = "Test";
Run Code Online (Sandbox Code Playgroud)
你将会拥有
BehaviorSubject<String> stringSubject = BehaviorSubject.<String>create("Test");
Run Code Online (Sandbox Code Playgroud)
然后你可以直接订阅stringObservable.
而不是像这样为变量赋值:
str = "Hello World!";
Run Code Online (Sandbox Code Playgroud)
你会的
stringSubject.onNext("Hello World!");
Run Code Online (Sandbox Code Playgroud)
哦,永远不要onError空着 - 这样做会悄悄地吞下任何可能早先发生过的异常,你会坐下来想知道为什么没有发生任何事情.至少写e.printStacktrace().
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |