繁体   English   中英

Livedata观察者onChanged()仅触发一次?

[英]Livedata observer onChanged() is only triggered once?

我正在在线关注LiveData示例,因此创建活动时,以某种方式仅将LiveData触发一次。 如果我打开另一个活动来更新Oppo对象,然后返回到该活动,则不会调用onChanged()。 我不确定出了什么问题。 因为当我检查LiveData时onResume()中有活动的观察者,所以它返回true。

这是代码:

活动

oppoViewModel = ViewModelProviders.of(this).get(OppViewModel.class);
    OppoViewModel.setOppo(extras.getString(RECORD_ID));
    oppoViewModel
            .getOpportunity()
            .observe(this, oppo -> {
                // Update the UI
            }
    );

视图模型

class OppoViewModel(application: Application) : AndroidViewModel(application) {

private var oppo: MutableLiveData<Oppo> = MutableLiveData()
private var compositeDisposable = CompositeDisposable()

fun setOppo(recordId: String) {

    compositeDisposable.add(Single.just(RepositoryProvider.oppoRepository()
            .getOppoByRecordId(recordId))
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(object : DisposableSingleObserver<Oppo>() {
                override fun onSuccess(t: Oppo) {
                    oppo.postValue(t)
                }

                override fun onError(e: Throwable) {
                }
            }))
}

fun getOpportunity(): MutableLiveData<Opp> {
    return oppo
}

override fun onCleared() {
    Timber.e("ViewModel onCleared()")
    compositeDisposable.clear()
    super.onCleared()
}
}

我正在使用RxJava从SQLite数据库获取数据库记录,并在这种情况下使用ContentResolver。 最初我认为oppo.postValue应该更改为oppo.setValue,但仍然不会触发

但是您只有一个订阅来进行更改

Single.just(RepositoryProvider.oppoRepository())

就您而言,这不是LiveDate消耗更新值的责任,您需要确保您的rx流在更新后会发出新值。

仅当在后台进行首次活动时会触发oppo.postValue(t)时,才会设置新值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM