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()
        }
    }
}