我正在在线关注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
}
);
ViewModel
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,但仍然不会触发
答案 0 :(得分:0)
但是您只订阅一个更改
Single.just(RepositoryProvider.oppoRepository())
对于您来说,LiveDate
并不承担消耗更新值的责任,您需要确保您的rx流在更新后会发出新值。
只有在您的第一个活动在后台时触发oppo.postValue(t)
时,才会设置新值。