android 等待协程过滤完成
android wait for filtering finish with coroutines
我有下一个代码:
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/main 线程?
请注意,从后台线程调用 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()
}
}
}
我有下一个代码:
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/main 线程?
请注意,从后台线程调用 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()
}
}
}