Как получить данные в корутине и обновить listview в виджете?

Я получаю данные из базы с помощью этой ф-ии:

suspend fun getDataTasksForWidget(context: Context, appWidgetId: Int) : ArrayList<Task> {
    val items: ArrayList<Task> by lazy { arrayListOf<Task>() }

    val duration = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).getInt(PREF_DURATION_WIDGET_TASKS+"_$appWidgetId", 0)

    val tmp = CoroutineScope(Dispatchers.IO).launch {
        val data = App.db.taskDao().getActive(duration)

        withContext(Dispatchers.Main){
            val filtered = data.filter { task ->
                !task.isExpired()
            }

            items.clear()
            items.addAll(filtered)
        }
    }

    tmp.join()
    return items
}

Затем эти данные попадают в RemoteViewsFactory в методе onDataSetChanged():

override fun onDataSetChanged() {
    CoroutineScope(Dispatchers.IO).launch {
        data = getDataTasksForWidget(context, widgetID)            
    }
}

Но естественно, в виджете listView пустой, потому что обновился с пустым data. А когда я его получил в корутине, как дальше обновить список?


Ответы (0 шт):