MVVM с RxJava без привязки данных - PullRequest
0 голосов
/ 25 января 2019

Прочитав много статей о MVVM и RxJava, мне нужно реализовать простейшую демонстрацию, чтобы хорошо уловить идею без использования DataBinding

Но я застрял в том, как ViewModel будет уведомлять View (Activity) со списком данных

Мой 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");

}

Ответы [ 2 ]

0 голосов
/ 27 января 2019

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()));
}

Приведенный выше пример не хранит подписку, чтобы предоставить вам упрощенный ответ, но на практике не забудьте очистить подписки, как вы это делали в своем примере.

0 голосов
/ 25 января 2019

Какие здесь пропущенные строки, чтобы обновить представление с данными

, которые вы можете использовать Rx, открывая наблюдаемое и подписавшись на него в вашем Activity,или выставить объект LiveData, либо опубликовав его, либо используя один из причудливых методов Transformations, которые они получили.В любом случае ваш Activity должен будет подписаться и обновить пользовательский интерфейс

...