微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当手机无法访问互联网时如何使 LoadStateAdapter 工作

如何解决当手机无法访问互联网时如何使 LoadStateAdapter 工作

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

情况:

LoadStateAdapter 添加PagingDataAdapter 作为页脚

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

loaderItem 在其 displayLoadStateAsItem 方法显示 基于 loadState 将返回 true。 认情况下,当 loadState = LoadState.LoadingLoadState.Error

时会发生这种情况
  • LoadStateAdapter 在页脚观察 loadState 时添加append
  • LoadStateAdapter 添加为 Header 监视 loadState。前置

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

loadState.mediatorloadState 中的错误“到达”。刷新 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)(假设 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
  }
}

但实际上,如果您使用 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 举报,一经查实,本站将立刻删除。