微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐