1

有谁知道在应用程序以断开的网络启动的情况下如何显示 LoadStateAdapter ?我正在使用 Paging 3 - 3.0.0-alpha13 (beta-01 在我的实现中丢失了密钥

情况:

将LoadStateAdapter作为页脚添加到PagingDataAdapter

在我们在 LoadStateAdapter 中收到状态(LoadState.Error)情况下,例如在网络丢失的情况下,此状态使“ loaderItem 可见

loaderItem在其基于 loadState 的 displayLoadStateAsItem 方法返回true时显示。默认情况下,当loadState = LoadState.LoadingLoadState.Error时会发生这种情况

  • LoadStateAdapter 添加为页脚监视 loadState。附加
  • LoadStateAdapter 添加为 Header 监视 loadState。前置

如果冷启动的应用程序无法访问网络 RemoteMediator会抛出MediatorResult错误({“无法解析主机... ”})

loadState中的错误“到达” 。调解员loadStaterefresh append 和 prepend 不接收错误具有NotLoading状态 (endOfPaginationReached = false) loaderItem未显示。

冷启动情况下LoadStateAdapter 出现在缓存列表后面的列表末尾时,如何正确获取结果?

ps: 我试图创建我的方法

   fun LoadStateWithBlackJackAndHookers (footer: LoadStateAdapter <*>): ConcatAdapter {
       addLoadStateListener {loadStates ->
                loadStates.mediator? .let {
                    if (it.refresh is LoadState.Error) {
                        footer.loadState = it.refresh
                    }
                }
                footer.loadState = loadStates.append
            }
            return ConcatAdapter (footer, this)
    }

它没有给出预期的结果,LoadStateAdapter开始收到错误消息但不显示loaderItem

4

1 回答 1

2

首先是页脚,你想要ConcatAdapter(this, footer)(假设thisPagingDataAdapter),否则你的页脚将被添加到列表中,实际上是页眉而不是页脚。

其次这里的逻辑:

loadStates.mediator? .let {
  if (it.refresh is LoadState.Error) {
    footer.loadState = it.refresh
  }
}
footer.loadState = loadStates.append

设置后不返回footer.loadState = it.refresh,而是立即用 覆盖该值footer.loadState = loadStates.append。我想你想要:

loadStates.mediator? .let {
  if (it.refresh is LoadState.Error) {
    footer.loadState = it.refresh
  } else {
    footer.loadState = loadStates.append
  }
}

但实际上,如果您正在自定义逻辑,您应该直接听 mediator.refresh,CombinedLoadStates因为CombinedLoadStates.refresh助手会启发式地做一些疯狂的事情来尝试猜测常见的期望行为。直接这样会更好:

if (it.loadStates?.mediator?.refresh is LoadState.Error) {
  footer.loadState = it.refresh
} else {
  footer.loadState = loadStates.append
}

作为令人兴奋的练习,您可以在此处关注帮助程序的更新方式:https ://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:paging/common/src/main/kotlin/androidx/ paging/MutableLoadStateCollection.kt;l=103?q=MutableLoadStateCollection&ss=androidx

于 2021-03-03T03:06:58.287 回答