lou*_*nah 5 android mvvm viewmodel android-architecture-components
我有以下ViewModel:
public class FeedViewModel extends ViewModel {
private final MutableLiveData<Photo> selectedPhoto = new MutableLiveData<>();
private final FeedRepository repository;
private LiveData<Resource<List<Photo>>> feed;
@Inject
FeedViewModel(@NonNull final FeedRepository repository) {
this.repository = repository;
}
public void selectPhoto(@NonNull final Photo photo) {
selectedPhoto.setValue(photo);
}
public LiveData<Photo> getSelectedPhoto() {
return selectedPhoto;
}
LiveData<Resource<List<Photo>>> getUserFeed() {
if (feed == null) {
feed = new MutableLiveData<>();
feed = repository.get();
}
return feed;
}
@Override
protected void onCleared() {
super.onCleared();
}
Run Code Online (Sandbox Code Playgroud)
}
我以这种方式观察片段中的提要:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
viewModel.getUserFeed().observe(this, feed -> {
switch (feed.status) {
case ERROR:
processErrorState(feed.data);
break;
case LOADING:
processLoadingState(feed.data);
break;
case SUCCESS:
if (feed.data != null)
processSuccessState(feed.data);
break;
}
});
}
Run Code Online (Sandbox Code Playgroud)
问题是:如何才能以正确的方式刷新Feed?假设用户触发了swipeToRefresh,那么该事件必须创建提要的刷新任务。如何使用ViewModel来实现呢?
您必须使用 liveData.post(new data) 获取数据并更新实时数据
In your Activity:
//to be called on refresh data
viewModel.getLatestFeed()
In your View Model:
fun getLatestFeed() {
//get data from repository
feed.post(refreshedData)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3403 次 |
| 最近记录: |