@Procger_Xacker

ListView не обновляется, когда я использую RxJava в виджетах?

В 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?
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
@WaterSmith
Android-разработчик. Java, Kotlin
Когда меняются данные, у вас вызывается метод, onDataSetChanged, но вы ничего в нем не делаете. А как было бы здорово, сделать то же самое, что вы делаете при нажатии кнопки "Обновить"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы