我有下一个代码:
private fun filterCarouselItems(loggedInFilter: Boolean) {
CoroutineScope(Dispatchers.IO).launch {
if (loggedInFilter)
filteredCarouselItems = carouselItems.filter {
it.visible == CarouselVisibilityEnum.LOGGEDIN.visibility
|| it.visible == CarouselVisibilityEnum.BOTH.visibility
} as ArrayList<CarouselItem>
else {
filteredCarouselItems = carouselItems.filter {
it.visible == CarouselVisibilityEnum.LOGGEDOUT.visibility
|| it.visible == CarouselVisibilityEnum.BOTH.visibility
} as ArrayList<CarouselItem>
}
withContext(Dispachers.Main) {
notifyDataSetChanged()
}
}
}我希望我的代码按顺序执行。这样,我的意思是希望函数完成筛选,然后调用notifyDataSetChanged方法。通过使用协同(而不阻塞UI/主线程)来实现这一点的最佳方法是什么?
发布于 2022-01-03 18:59:39
请注意,从后台线程调用notifyDataSetChanged()没有任何效果。
private fun filterCarouselItems(loggedInFilter: Boolean) {
CoroutineScope(Dispatchers.IO).launch {
if (loggedInFilter)
filteredCarouselItems = carouselItems.filter {
it.visible == CarouselVisibilityEnum.LOGGEDIN.visibility
|| it.visible == CarouselVisibilityEnum.BOTH.visibility
} as ArrayList<CarouselItem>
else {
filteredCarouselItems = carouselItems.filter {
it.visible == CarouselVisibilityEnum.LOGGEDOUT.visibility
|| it.visible == CarouselVisibilityEnum.BOTH.visibility
} as ArrayList<CarouselItem>
}
// add this line
withContext(Dispachers.Main) {
notifyDataSetChanged()
}
}
}https://stackoverflow.com/questions/70566568
复制相似问题