android - 带有 RxJava 的 MVVM,没有数据绑定(bind)

标签 android mvvm rx-java rx-java2 android-mvvm

阅读了很多关于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/

相关文章:

android - 没有 onTouch 的 CollapsingToolbarLayout?

具有ItemsControl的WPF MVVM可移动形状

android - Retrofit2 和 rxjava - 如何在 android 中组合两个依赖的网络调用

android - 过滤列表 Activity

android - Android Studio 无法识别 .kt 文件

android - 应用程序关闭后无法使 Android 服务保持 Activity 状态

wpf - 将标题复选框绑定(bind)到用户控件的数据上下文的更好方法是什么?

c# - 数据绑定(bind)到索引属性

java - 在返回到订阅者之前,如何拦截一个可观察对象并在 RxJava 中修改它?

android - 何时在 rxjava 中使用 `unSubscribeOn`