带有分页库的进度条和错误消息

Dam*_*tes 7 android android-architecture-components android-paging

分页库很棒.但我发现缺乏这个功能:

  • 在加载数据时调度视图.假设我正在扩展PageKeyedDataSource:loadInitial调用时顶部的视图,loadAfter调用时列表底部的视图.callback调用时视图应该消失.
  • 出现错误时发送视图.
  • 滑动即可刷新

由于现在不可能,有没有人知道使用PagingLibrary的方法?至少在同一列表中使用不同视图的方法.

wal*_*r86 5

有很棒的示例@yigit 与分页库相关,它也展示了如何在 Recyclerview 中处理进度条、错误和重试。所以基本上他正在创建一个Listing.kt数据类,它由下面的NetworkStatePagedList喜欢的组成

清单.kt

data class Listing<T>(
        // the LiveData of paged lists for the UI to observe
        val pagedList: LiveData<PagedList<T>>,
        // represents the network request status to show to the user
        val networkState: LiveData<NetworkState>,
        // represents the refresh status to show to the user. Separate from networkState, this
        // value is importantly only when refresh is requested.
        val refreshState: LiveData<NetworkState>,
        // refreshes the whole data and fetches it from scratch.
        val refresh: () -> Unit,
        // retries any failed requests.
        val retry: () -> Unit)
Run Code Online (Sandbox Code Playgroud)

网络状态.kt

enum class Status {
    RUNNING,
    SUCCESS,
    FAILED
}

@Suppress("DataClassPrivateConstructor")
data class NetworkState private constructor(
        val status: Status,
        val msg: String? = null) {
    companion object {
        val LOADED = NetworkState(Status.SUCCESS)
        val LOADING = NetworkState(Status.RUNNING)
        fun error(msg: String?) = NetworkState(Status.FAILED, msg)
    }
}
Run Code Online (Sandbox Code Playgroud)

RedditPostRepository.kt

interface RedditPostRepository {
    fun postsOfSubreddit(subReddit: String, pageSize: Int): Listing<RedditPost>

    enum class Type {
        IN_MEMORY_BY_ITEM,
        IN_MEMORY_BY_PAGE,
        DB
    }
}
Run Code Online (Sandbox Code Playgroud)

SubRedditViewModel.k观察Listing<RedditPost>RedditPostRepository.kt通知给UI有关的状态和数据和UI相应地更新视图。要了解有关如何NetworkState数据源传播 到 ViewModel 的更多信息,请查看PageKeyedSubredditDataSource.ktSubRedditDataSourceFactory.kt

这里是链接到由@yigit的谷歌样品。