Проверьте, пуст ли список при первом запросе в Paging 3.0 - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь проверить, пришел ли первый запрос с пустым объектом, чтобы отобразить макет, указывающий, что у него нет элемента.

Мое решение состояло в том, чтобы создать собственное исключение. Я хотел бы знать, есть ли другой способ лучше. Потому что я просмотрел документацию и ничего не нашел.

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

1 Ответ

1 голос
/ 09 августа 2020

Чтобы показать EmptyView, вы можете посмотреть loadState.append, который представляет состояние загрузки для загрузки данных в конце списка и может подтвердить, нет ли больше данных для загрузки, используя endOfPaginationReached, а после этого можно проверить itemCout из PagingDataAdapter. `.

eg:  adapter.addLoadStateListener { loadState ->

            if ( loadState.append.endOfPaginationReached )
            {
               if ( adapter.itemCount < 1)
                    /// show empty view
               else 
                   ///  hide empty view
            }
           }
...