MVVM notify有关加载状态的视图

P. *_*rov 7 android mvvm

我现在正在使用Google的LiveData,他们建议使用MVVM模式设计.对于我的一些请求,我使用RxJava2,并在SubscribeWith(...)中侦听响应.

例如,当我按下按钮将一些数据发送到远程数据源时,我正在显示一些加载动画并希望将其隐藏在onComplete()事件上(在subscribeWith(...)内).问题是我无法访问ModelView中的View.怎么可能让View知道加载动画应该被隐藏?

我目前的想法是在ViewModel中创建接口并在View中实现它.但它破坏了View和ViewModel分离的概念.

Ahm*_*ged 18

那么你可以使用liveData:D

在ViewModel类中,您可以创建这样的实时数据对象

 MutableLiveData<Boolean> isLoading = new MutableLiveData<>();
Run Code Online (Sandbox Code Playgroud)

例如,创建一个名为downloadFinished的函数,并在onComplete 远程代码中调用它

 private void downloadFinished() {
        isLoading.setValue(true);
    }
Run Code Online (Sandbox Code Playgroud)

在使用视图模型的活动中,您可以观察加载的值并隐藏进度或者您想要的内容

   TestViewModel viewModel = ViewModelProviders.of(this).get(TestViewModel.class);
        viewModel.isLoading.observe(this, new Observer<Boolean>() {
            @Override
            public void onChanged(@Nullable Boolean isLoading) {
                if (isLoading != null) {
                    if (isLoading) {
                        // hide your progress bar
                    }
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

  • 伙计,这是个好主意!谢谢) (2认同)