使用RxJava将数据从ViewModel移到Fragment

时间:2019-07-13 16:10:11

标签: java android kotlin rx-java android-livedata

我正在尝试使用MVVM体系结构构建应用程序。 但是当使用RxJava下载此值后,我不知道如何将其从ViewModel移至Fragment。

目前,我有这段代码,但我不知道该怎么做。 有人可以帮忙吗?

片段:

viewModel.loadListOfCats().observe(this, Observer {
                it?.let {
                    listOfCats.clear()
                    listOfCats.addAll(it.listOfCats)
                    catAdapter.notifyDataSetChanged()
                }
            })

在ViewModel中:

fun loadListOfCats(): LiveData<ListOfCats>{
        compositeDisposable.add(listOfQuizzesRepository.getListOfCats()
            .subscribeWith(object: DisposableSingleObserver<ListOfCats>(){
                override fun onSuccess(t: ListOfCats) {
                    val listOfCats= t

                }

                override fun onError(e: Throwable) {

                }

            }))
        return ?
    }

1 个答案:

答案 0 :(得分:0)

Rx完成是通过异步过程而不是同步过程进行的。就是说,当此功能涉及return ?时,Rx尚未完成其工作。

因此,您不能在函数末尾返回从Rx获得的值。

您必须在其onSuccess和onError回调中设置值。

class YourViewModel {
    val listCats = MutableLiveData<ListOfCats>()

    fun loadListOfCats() {
        ...
            override fun onSuccess(t: ListOfCats) {
                listCats.value = t
            }
        ...
    }
}

class YourFragment {
    ...
    viewModel.listCats.observe(this, Observer {
        it?.let {
            ...
        }
    })
}