![](/img/trans.png)
[英]Changing request and get a new data stream when using Paging3 library
[英]Display empty state when using Google's Paging3 library
我目前第一次使用 Google 的 Paging3 庫。 我的代碼基於https://codelabs.developers.google.com/codelabs/android-paging/#0上的 Codelab。
我的應用程序的流程遵循以下規則:
不幸的是,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。 它應該只在有結果並且用戶沒有按下后退按鈕時可見。
有人可以指出我正確的方向,我該怎么做? 關於這個問題是否有某種最佳實踐?
提前致謝!
以下是一些您可能會覺得有用的 API:
您可以使用PagingData.empty()
創建一個空的PagingData
您可以提交以“清除”之前的PagingData
,直到再次調用adapter.submitData
。 如果您想在搜索之間或搜索之前顯示空狀態,這很有用。 如果你想顯示一些靜態內容,你也可以使用PagingData.from(list)
。
要獲得顯示的項目計數,您可以使用adapter.itemCount
如果您需要特別檢查刷新完成后加載了哪些項目,您可以使用adapter.peek(index)
或adapter.snapshot()
一次獲取所有項目(但成本更高)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.