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

时间:2018-01-09 17:29:10

标签: android android-architecture-components android-paging

Paging Library太棒了。但我发现缺乏这个功能:

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

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

1 个答案:

答案 0 :(得分:0)

主要思想是保留对由数据源工厂创建的数据源的引用。 以下是https://github.com/googlesamples/android-architecture-components/tree/master/PagingWithNetworkSample

的代码段
class SubRedditDataSourceFactory(
    private val redditApi: RedditApi,
    private val subredditName: String,
    private val retryExecutor: Executor) : DataSource.Factory<String, 
RedditPost>() {
    val sourceLiveData = MutableLiveData<PageKeyedSubredditDataSource>()
    override fun create(): DataSource<String, RedditPost> {
        val source = PageKeyedSubredditDataSource(redditApi, subredditName, 
retryExecutor)
        sourceLiveData.postValue(source)
        return source
   }
}

在此代码示例中,“ sourceLiveData”发布活动数据源。 数据源又可以将所有相关信息暴露给视图,例如网络状态和指示符(如果首次加载完成)

为了添加刷新行为,请使用SwipeRefreshLayout将回收器视图包装起来,如下所示。现在您可以访问数据源了,您可以使它无效,并且视图将刷新

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout android:id="@+id/swipe_refresh"
                                              android:layout_width="match_parent"
                                              android:layout_height="match_parent">
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        app:layoutManager="LinearLayoutManager"/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>