如何在架构组件ViewModel中刷新数据

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来实现呢?

sil*_*rol 2

您必须使用 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)