簡體   English   中英

Room android LiveData 僅觀察調用 2 次

[英]Room android LiveData observe call only 2 times

我在 Room 庫 android 中使用 LiveData 時遇到問題。

我有一個片段,其中有一個RecyclerView並使用LiveData填充Observer

mDB.user().getUsers().observe(getViewLifecycleOwner(), new Observer<List<UserModel>>() {
        @Override
        public void onChanged(List<UserModel> userModels) {
            updateUI(userModels);
        }
});

如果我點擊 ADD 按鈕,調用一個startActivity ,用我的表單打開一個新的 Activity,編譯所有字段並@INSERT在 DB 上@INSERT一個新項目

AsyncTask.execute(() -> {
        mDB.user().addUser("NAME");
        finish();
});

完成當前 Activity 后,再次顯示前一個 Fragment 並自動調用onChanged observe僅被調用 2 次,如果我單擊 ADD 按鈕(第三次)並返回到片段,則永遠不會調用並且永遠不會刷新我的列表。 我不知道為什么。

我試過observeForever沒有結果。

我看到在調試中,從未調用過removeObserver ,因此觀察者處於活動狀態。

這些是我的依賴項

def room_version = "2.2.5"
def lifecycle_version = "2.3.0-alpha01"

// Room database
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

您應該從UsersFragment onResume()調用observe()而不是onCreateView()因為為了添加新用戶,您正在切換到一個新的 Activity 暫停當前活動和附加到它的片段而不是破壞視圖碎片。 因此,當您返回當前活動時,永遠不會調用UsersFragment onCreateView()UsersFragment會調用onResume()

但是,我建議您實現一個適當的ViewModelRepository模式來與Room數據庫進行通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM