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

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...