我目前正在学习第三页图书馆。我有一个应用程序,有闪烁占位符显示,同时加载数据。当我得到数据时,我想隐藏微光布局并显示回收器视图。
lifecycleScope.launch {
quoteViewModel.getQuotes2().collectLatest {
binding.shimmerLayout.visibility = View.GONE // this line gets executed when view created and it causes shimmer layout to hide
binding.homeRecyclerView.visibility = View.VISIBLE
homeAdapter.submitData(it)
Log.d("mytag", "after submit data") // this line isn't executed
}
}
这里的问题是后面的线 submitData
没有被处决,我查了一下,发现原因是 submitData
永不返回,因此不会被调用。但是我没有找到任何示例代码。有人能给我看一个解决这个问题的示例代码吗?
我想在submitdata之后执行的逻辑是隐藏shimmerlayout并显示recyclerview,但由于该逻辑在提交数据之前,因此会立即执行,因此在加载数据时,shimmerlayout似乎不会执行。
1条答案
按热度按时间xwmevbvl1#
正如你所提到的,这是真的线后
submitData()
不会执行,因为它不会返回。你到底想用什么来实现Paging 3
这里有吗?我也有类似的疑问,我的
recyclerview
未更新从中获取的数据Paging 3
因为我在用collect
操作人员Dustin Lam
,作者Paging 3
图书馆让我在这里代替图书馆collect
具有collectLatest
这就解决了我的问题。在您的情况下,您已经在使用
collectLatest
. 一个快速解决方法是将submitData
年底collectLatest
因为这就是问题的根源。正如在报告中提到的
collectLatest
定义,终端流量操作员,通过提供的操作收集给定流量。与collect的关键区别在于,当原始流发出新值时,先前值的操作块将被取消。
请注意,替换
collect
具有collectLatest
修复了我的案例的问题,只是因为最初我的StateFlow
是emitting
一Initial
状态,但当数据准备就绪时,它发出Success
未由用户收集的状态collect
接线员submitData
永远不会回来,但是collectLatest
强制取消上一个操作块并收集新值。我还不确定你的问题的解决方案,但要么用准确的答案编辑你的问题
use case
或者,如果你找不到任何替代方案,你可以直接问Dustin Lam
就像我一样:)