在 Paging 3.0 中的第一个请求中检查列表是否为空

Oli*_*mon 8 android kotlin android-paging

我试图检查第一个请求是否带有空对象,以显示一个布局,表明它没有项目。

我的解决方案是创建一个我自己的例外。我想知道是否有另一种更好的方法。因为我查看了文档并没有发现任何内容。

override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Item> {
    return try {
        val position = params.key ?: FIRST_PAGE_INDEX
        val response = api.getItem(position, params.loadSize, searchKey)
        val nextKey = response?.next
        val itemList = response?.itemList ?: emptyList()

        if (itemList.isNotEmpty()) {
            LoadResult.Page(
                data = itemList,
                prevKey = null,
                nextKey = if (nextKey == LAST_PAGE_INDEX) null else nextKey
            )
        } else {
            LoadResult.Error(EmptyListException())
        }

    } catch (exception: IOException) {
        LoadResult.Error(exception)
    } catch (exception: HttpException) {
        LoadResult.Error(exception)
    }
}
Run Code Online (Sandbox Code Playgroud)

Sar*_*han 15

为了显示EmptyView你可以看看loadState.append它代表了列表的末尾加载数据的负载状态,从而可以确认是否有使用没有更多的数据负载endOfPaginationReached之后,可以检查itemCoutPagingDataAdapter。` .

eg:  adapter.addLoadStateListener { loadState ->

            if ( loadState.append.endOfPaginationReached )
            {
               if ( adapter.itemCount < 1)
                    /// show empty view
               else 
                   ///  hide empty view
            }
           }
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案!如果将其更改为“if (loadState.source.refresh is LoadState.NotLoading &amp;&amp; loadState.append.endOfPaginationReached)”,效果会更好,因为这样您就可以在触发新搜索时将空视图设置回不可见 (2认同)