@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, но вы ничего в нем не делаете. А как было бы здорово, сделать то же самое, что вы делаете при нажатии кнопки "Обновить"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы