微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我在小部件中使用 RxJava 时,ListView 不会更新

如何解决当我在小部件中使用 RxJava 时,ListView 不会更新

在widget的ListView中,我使用RxJava显示了Room DB中的数据,但是数据并没有立即更新,而是只有当我按下“Update”按钮时,才会调用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 中吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。