如何观察发出回叫请求的ViewModel

时间:2019-04-02 18:06:09

标签: android kotlin observable android-livedata

我正在尝试向图书馆提出请求,要求我回电。

Manager.getInstance().request(new CallBack())

我想将其放在ViewModel中,以便可以从Activity观察它。

class RequestViewModel : ViewModel, CallBack {

    fun request() {
        Manager.getInstance().request(this)
    }

    override fun onFinished(result : List<String>?) {
    }

    override fun onFailed() {
    }
}

如何做到这一点,以便观察完成的时间?我知道我可以让我的Activity实现这个CallBack,但是我不想将Activity与此结合。

理想情况下,这将是LiveData或Observable。

2 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,则可以将通过LiveData方法获取的数据提交给class RequestViewModel : ViewModel, CallBack { private val _liveData = MutableLiveData<SomeResult<List<String>>> val liveData: LiveData<SomeResult<List<String>>> get() = _liveData fun request() { Manager.getInstance().request(this) } override fun onFinished(result : List<String>?) { if (result != null) { _liveData.postValue(SomeResult.success(result)) } else { _liveData.postValue(SomeResult.failure()) } } override fun onFailed() { _liveData.postValue(SomeResult.failure()) } } 实例,该实例应由视图组件观察,例如

viewModel.liveData.observe(lifecycleOwner, Observer<List<String>> {
    handleResponse(it)
})

对象中与视图组件相对应的某处:

lifecycleOwner

AppCompatActivity通常是您的android.support.v4.Fragmentpublic class SerialMatrix { public string SerialNumber { get; set; } public Image DataMatrix { get; set; } } 继承者。

答案 1 :(得分:0)

我建议您从ViewModel分离请求,并创建一个名为Repository的类来处理所有请求。在此类中,您可以拥有一个MutableLiveData对象,可以观察到该对象,并且每当检索到新的请求数据时,请将mutableLiveData.postValue(retrievedData)用于MutableLiveData即可通知观察值有关新的更改。

要了解有关存储库的更多信息,可以单击以下链接:

Google's Guide to App Architecture

Codelab tutorial with Repository pattern