我当前是第一次使用Google的Paging3库。我将代码基于他们位于https://codelabs.developers.google.com/codelabs/android-paging/#0的Codelab。
我的应用程序流程遵循以下规则:
不幸的是,代码实验室无法处理空状态:(我正在使用以下addLoadStateListener来处理搜索结果:
adapter.addLoadStateListener { loadState ->
// Only show the list if refresh succeeds.
binding.userRecyclerView.isVisible = loadState.source.refresh is LoadState.NotLoading
// Show loading spinner during initial load or refresh.
binding.progressBar.isVisible = loadState.source.refresh is LoadState.Loading
// Show the retry state if initial load or refresh fails.
binding.errorMessage.isVisible = loadState.source.refresh is LoadState.Error
if (binding.errorMessage.isVisible) {
binding.errorMessage.text =
(loadState.source.refresh as LoadState.Error).error.toString()
}
binding.retryButton.isVisible = binding.errorMessage.isVisible
// Toast on any error while loading more entries
val errorState = loadState.source.append as? LoadState.Error
?: loadState.source.prepend as? LoadState.Error
?: loadState.append as? LoadState.Error
?: loadState.prepend as? LoadState.Error
errorState?.let {
Toast.makeText(
context,
resources.getString(R.string.error_loading),
Toast.LENGTH_LONG
).show()
}
}
如何使用addLoadStateListener显示空状态? LoadState仅具有三个可能的值:NotLoading,Loading和Error。但是,我并不总是想要显示RecyclerView。仅在有结果且用户未按下“后退”按钮时,它才可见。
有人可以指导我正确的方向吗?关于此问题是否有某种最佳实践?
谢谢!
答案 0 :(得分:0)
以下一些API可能会有所帮助:
您可以使用PagingData.empty()
创建一个空白的PagingData
,然后提交以“清除”先前的PagingData
,直到再次调用adapter.submitData
。如果要在搜索之间或搜索之前显示空状态,这很有用。如果要显示一些静态内容,也可以使用PagingData.from(list)
。
要获取显示的商品数量,您可以使用adapter.itemCount
如果您需要专门检查刷新完成后加载了哪些项目,则可以使用adapter.peek(index)
或adapter.snapshot()
一次获取所有项目(但价格更高)。