В ListView виджета я отображаю данные из Room DB с помощью RxJava, но данные обновляются не сразу, а только когда я нажимаю кнопку «Обновить», которая вызывает функцию updateAppWidget ().
class ListViewAdapter(ctx: Context, intent: Intent): RemoteViewsService.RemoteViewsFactory {
private var context: Context? = null
private var widgetId = 0
var data: ArrayList<String>? = null
init {
context = ctx
widgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID)
// get data
}
override fun onCreate() {
data = ArrayList()
getList()
}
override fun onDestroy() {}
override fun getCount(): Int {
return data!!.size
}
override fun getViewAt(position: Int): RemoteViews {
val rView = RemoteViews(context!!.packageName, R.layout.list_view)
rView.setTextViewText(R.id.myTextView, data!![position].name)
return rView
}
...
override fun onDataSetChanged() {
// do nothing
}
...
fun getList() {
val v = AIWdataRepositoryGet()
Observable.fromIterable(listOfIds.toSet())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMapSingle {
userDatabase.userDao().getById(it)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
.toList()
.map {
it.map {
InfoStruct(
it.Name.toString(),
it.Id.toString()
)
}
}
.subscribe(
{
for(c in it) {
data!!.add(c.userName)
}
onDataSetChange()
},
{ onError }
).toString()
}
}
Подскажите, пожалуйста, что я делаю не так и что мне нужно исправить, чтобы сразу после загрузки данные отображались в ListView?