gpt4 book ai didi

Android RecyclerView 分页问题

转载 作者:行者123 更新时间:2023-12-04 15:24:41 26 4
gpt4 key购买 nike

我正在关注 this example使用 TMDB Api 实现分页库。

当我向下滚动列表达到边界条件时,它总是会向上滚动到第 1 页。

我认为 RemoteMediator 类存在一些问题导致了这个问题,但我几乎是从 Google 示例中复制...

下面是我的日志。我在这里向下滚动列表。 Log

我想问题是在我向下滚动列表时调用了“LoadType = PREPEND”。适配器首先追加下一页,但随后检测到下一页 顶部的边界条件并决定执行 PREPEND,这会导致问题吗?我不确定如何解决这个问题。我已经尝试更改寻呼机的配置,但它不起作用。

You may find my code here.

提前致谢!

最佳答案

我遇到了同样的问题,但对我来说,解决方案是从 SearchRepositoriesActivity 中删除以下行:

private fun initSearch(query: String) {

/* Some code here */

// Remove these lines
/*
lifecycleScope.launch {
@OptIn(ExperimentalPagingApi::class)
adapter.dataRefreshFlow.collect {
binding.list.scrollToPosition(0)
}
}
*/
}

可以看到here在存储库上。这是在代码实验室中引入的,以便在完成请求(用于新存储库搜索)后 RecyclerView 滚动回顶部,这正是我正在发生的事情:RecyclerView 只有在 OkHttp 记录它收到请求的结果后才会上升。

我无法完全理解为什么这仅适用于网络实现,而不适用于网络 + 数据库。如果我对代码的理解正确,则应该仅在发生 LoadState.REFRESH 事件时通知此流。我相信有一个隐藏的 LoadState.REFRESH 正在发送,但未在 RemoteMediator 上收到。删除上面的代码后,屏幕仍然闪烁,因为它很快进入了 Loading 状态。您可以通过将日志添加到 addLoadStateListener(可用 here)来查看它,如下所示:

adapter.addLoadStateListener {  loadState ->
// Add this log
Log.d("UI_PAGING", "source: ${loadState.source.refresh}, remote: ${loadState.refresh}")

// Only show the list if refresh succeeds.
binding.list.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.retryButton.isVisible = loadState.source.refresh is LoadState.Error

/* some other code here */
}

显示以下日志:

Android Logs for Paging Library 3

如您所见,Room 会在追加发生后更改刷新状态。

关于Android RecyclerView 分页问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62517638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com