阅读了很多关于MVVM和RxJava的文章后,我需要实现一个最简单的demo,以便在不使用DataBinding的情况下很好地捕获思路
但我在 ViewModel 如何将数据列表通知 View(Activity)的方式上遇到了困难
我的 ViewModel 包含以这种方式使用 RxJava 的 fetchGitHub()
io.reactivex.Observable<List<Repo>> reposReturnedObservable = githubClient.reposForUser(user);
reposReturnedObservable
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<Repo>>() {
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onNext(List<Repo> repos) {
data = repos;
}
});
这里用数据更新 View 缺少的行是什么
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = new ViewModel();
viewModel.fetchGitHub("square");
}
最佳答案
fetchGitHub()
应该返回一个 Observable
,以便 Activity
可以订阅它。
View 模型:
public class ViewModel {
public Observable<List<Repo>> fetchGitHub(String userName) {
return githubClient.reposForUser(user);
}
}
Activity :
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView listSizeTextView = findViewById(R.id.listSizeTextView);
viewModel = new ViewModel();
viewModel.fetchGitHub("square")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(list -> listSizeTextView.setText("list size: " + list.size()));
}
上面的示例没有存储订阅,以便为您提供一个简化的答案,但在实际操作中,请确保像您在示例中所做的那样清除订阅。
关于android - 带有 RxJava 的 MVVM,没有数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54366677/