我现在正在使用Google的LiveData,他们建议使用MVVM模式设计.对于我的一些请求,我使用Rx
Java2,并在SubscribeWith(…)中侦听响应.
例如,当我按下按钮将一些数据发送到远程数据源时,我正在显示一些加载动画并希望将其隐藏在onComplete()事件上(在subscribeWith(…)内).问题是我无法访问ModelView中的View.怎么可能让View知道加载动画应该被隐藏?
解决方法
那么你可以使用liveData:D
在viewmodel类中,您可以创建这样的实时数据对象
MutableLiveData<Boolean> isLoading = new MutableLiveData<>();
例如,创建一个名为downloadFinished的函数,并在onComplete中调用它
为您的远程代码
private void downloadFinished() { isLoading.setValue(true); }
在使用视图模型的活动中,您可以观察加载的值并隐藏进度或者您想要的内容
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 } } } });