如何在Kotlin和Java中解决PublishSubject,MutableLiveData,RxJava和Disposable替代?

时间:2019-01-13 13:50:47

标签: java android mvvm kotlin android-livedata

咨询台部分

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);

此代码在第一次使用时效果很好,但是从第二次开始填充重复的数据集。 :(:(

0 个答案:

没有答案