如何解决当手机无法访问互联网时如何使 LoadStateAdapter 工作
有谁知道怎么显示 LoadStateAdapter 在应用程序以断开的网络启动的情况下? 我正在使用 Paging 3 - 3.0.0-alpha13(beta-01 在我的实现中丢失了密钥)
情况:
将 LoadStateAdapter 添加到 PagingDataAdapter 作为页脚
如果我们在 LoadStateAdapter 中收到状态 (LoadState.Error),例如,在网络丢失的情况下,这状态使“loaderItem”可见
loaderItem 在其 displayLoadStateAsItem 方法时显示 基于 loadState 将返回 true。 默认情况下,当 loadState = LoadState.Loading 或 LoadState.Error
时会发生这种情况如果应用程序从冷启动无法访问网络 RemoteMediator 抛出 MediatorResult。错误 ({"无法解析主机 ..."})
loadState.mediator 和 loadState 中的错误“到达”。刷新 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
解决方法
首先对于页脚,您需要 ConcatAdapter(this,footer)
(假设 this
为 PagingDataAdapter
),否则您的页脚将被添加到列表中并且实际上是页眉而不是页脚。
这里的第二个逻辑:
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
}
}
但实际上,如果您使用 CombinedLoadStates
自定义逻辑,则您应该直接收听 mediator.refresh,因为 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。