咨询台部分
1。我已经使用以下配置编写了BaseViewModel.kt。
val ioDisposables: CompositeDisposable
val inputs: PublishSubject<Response<List<X>>>
val outputs: MutableLiveData<Response<List<X>>>
init {
outputs = rx.toLiveData(inputs, ioDisposables)
}
override fun onCleared() {
ioDisposables.clear()
super.onCleared()
}
fun observeOutputs(owner: LifecycleOwner, observer: Observer<Response<List<X>>>) {
multipleOwners.add(owner)
outputs.reObserve(owner, observer)
}
2。 RxMapper拥有toLiveData()api的动态绑定,如下所示:
fun <T> toLiveData(subject: PublishSubject<T>, disposables: CompositeDisposable): MutableLiveData<T> {
val data = MutableLiveData<T>()
val disposable = subject.subscribe({ data.setValue(it) })
disposables.add(disposable)
return data
}
3。 LiveDataMapper适用于reObserve()API
fun <T> LiveData<T>.reObserve(owner: LifecycleOwner, observer: Observer<T>) {
removeObserver(observer)
observe(owner, observer)
}
Java节-来自Fragments类
4。第一次订阅输出
vm = ViewModelProviders.of(this, factory).get(FlagViewModel.class);
vm.observeOutputs(this, this::processResponse);
此代码在第一次使用时效果很好,但是从第二次开始填充重复的数据集。 :(:(