我现在正在使用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)
| 归档时间: |
|
| 查看次数: |
3228 次 |
| 最近记录: |