Android Architecture Components LiveData进度更新

标签 android android-architecture-components android-livedata

我不确定我是否遗漏了什么。我似乎找不到任何关于如何在使用 LiveData 提取数据时发布进度的示例或教程。

例如;假设我的数据库中有 5000 条记录,我想显示我正在从数据库中读取的记录,而不是显示中间进度条。

示例展示了如何从数据库或网络加载数据并返回一个列表。但是,没有提到如何像在 AsyncTask 上那样发布进度。

据我了解,您通过以下方式获取所有数据:

ViewModelProviders.of(this).get(MyViewModel.class);
model.getData().observe(this, data -> {
  // update UI
});

我想可以创建某种类型的监听器/回调,但架构组件不应该让您避免这种情况吗? 我错过了什么吗?

最佳答案

应用程序架构指南展示了 how to expose network status 的示例.我想您可以通过在加载时添加进度百分比来修改以下通用类。

//a generic class that describes a data with a status
public class Resource<T> {
    @NonNull public final Status status;
    @Nullable public final T data;
    @Nullable public final String message;
    private Resource(@NonNull Status status, @Nullable T data, @Nullable String message) {
        this.status = status;
        this.data = data;
        this.message = message;
    }

    public static <T> Resource<T> success(@NonNull T data) {
        return new Resource<>(SUCCESS, data, null);
    }

    public static <T> Resource<T> error(String msg, @Nullable T data) {
        return new Resource<>(ERROR, data, msg);
    }

    public static <T> Resource<T> loading(@Nullable T data) {
        return new Resource<>(LOADING, data, null);
    }
}

此外,您还可以检查完整的实现 here .

关于Android Architecture Components LiveData进度更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47870971/

相关文章:

android - 在 fragment 和 Activity 中观察 LiveData 实例

android - 如何更改Android模拟器的默认语言?

android - 如何在没有服务器端分页的情况下在android中使用分页?

android - 我们可以在单个 Activity 中添加多个 ViewModel.observer() 方法吗

安卓房间数据库。如何将我的模型类添加到 Room 数据库中

android - 在 android 中使用 Retrofit 和 LiveData 执行一系列异步 Web 请求

javascript - Android/Phonegap - onClick() 不工作

Android Material Design 组件示例

java - Android KeyStore 系统 - 保存 key 对?

android - 如何在 Android 中覆盖 LiveData toString