在阅读了很多有关MVVM和RxJava的文章之后,我需要实现最简单的演示以在不使用DataBinding的情况下很好地理解这个想法
但是我对ViewModel如何使用数据列表通知View(活动)的方式陷入了困境
我的ViewModel包含fetchGitHub(),它以这种方式使用RxJava
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;
}
});
此处缺少哪些行以使用数据更新视图
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = new ViewModel();
viewModel.fetchGitHub("square");
}
答案 0 :(得分:1)
fetchGitHub()
应该返回一个Observable
,以便Activity
可以订阅它。
ViewModel:
public class ViewModel {
public Observable<List<Repo>> fetchGitHub(String userName) {
return githubClient.reposForUser(user);
}
}
活动:
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()));
}
以上示例未存储订阅以为您提供简化的答案,但在实际操作中,请确保像示例中一样清除订阅。
答案 1 :(得分:0)
此处缺少哪些行以使用数据更新视图
您可以使用Rx
,在您的Activity
中公开可观察对象并进行订阅,也可以公开LiveData
对象,在其上发布或使用一种奇特的{他们得到的{1}}方法。无论哪种情况,您的Transformations
都必须订阅并更新用户界面