android – 如何刷新Architecture Components ViewModel中的数据

我有以下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();
}

}

我用这种方式观察Fragment中的feed:

@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;
        }
    });
}

问题是:我怎样才能以正确的方式刷新饲料?假设用户触发了swipeToRefresh,因此该事件必须创建一个feed的刷新任务.我如何使用ViewModel实现这一点?

最佳答案 您必须使用liveData.post获取数据并更新实时数据(新数据)

InActivity: 
//to be called on refresh data 
vieeModel.getLatestFeed()

In View Model:
fun getLatestFeed() {
//get data from repository
feed.post(refreshedData)
}
点赞