[英]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()
。
但是,我建議您實現一個適當的ViewModel
、 Repository
模式來與Room
數據庫進行通信。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.