簡體   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