簡體   English   中英

使用 Google 的 Paging3 庫時顯示空狀態

[英]Display empty state when using Google's Paging3 library

我目前第一次使用 Google 的 Paging3 庫。 我的代碼基於https://codelabs.developers.google.com/codelabs/android-paging/#0上的 Codelab。

我的應用程序的流程遵循以下規則:

  1. 顯示空狀態
  2. 讓用戶搜索一些東西
  3. 顯示結果
  4. 當用戶按下搜索欄上的后退按鈕時 -> 再次顯示空狀態

不幸的是,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM