java—如何在使用rxjava接收的listview上显示数据

mcvgt66p  于 2021-07-14  发布在  Java
关注(0)|答案(0)|浏览(170)

在这个问题的标签中指出java,因为java和kotlin是兼容的,这里有一个与java非常相似的例子
我创建了一个在列表视图中显示数据的程序。我正在学习rxjava2,并决定制作一个示例,其中使用rxjava获得的数据显示在列表视图中。下面是listview适配器的代码。

class AdapterListView(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)
    }

    override fun onCreate() {
        data = ArrayList()
    }

    override fun onDataSetChanged() {
        data!!.clear()
        Observable // There is pseudo observable for example
        .observeOn(SchedulerProvider.ui())
        .subscribe (
                {
                    for(i in it.indices) {
                        Log.e("IT::", it[i])
                        data!!.add(it[i])
                    }
                },
                {
                    data!!.add("ERROR")
                }
            )
            .toString()
    }

    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.textView, data!![position])

        return rView
    }

    override fun getLoadingView(): RemoteViews? {
        return null
    }

    override fun getViewTypeCount(): Int {
        return 1
    }

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    override fun hasStableIds(): Boolean {
        return true
    }
}

使用subscribe,我获取数据并添加到动态数组中。对于log.e,数据显示在屏幕上,也就是说,没有错误,但是它们没有添加到数据中,或者它们被添加,但是由于rxjava是异步运行的,所以没有数据添加到数据中。想知道是否有一种方法来实现它,以便您可以使用rxjava将数据输出到listview吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题