Room android LiveData只观察通话2次



我在Room库android中使用LiveData时遇到问题。

我有一个片段,其中有一个RecyclerView,要使用Observer填充LiveData

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

如果我点击ADD按钮,调用startActivity,用我的表单打开一个新的活动,编译所有字段,@INSERT在DB 上成为一个新项目

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

当完成当前活动时,再次显示上一个片段,并自动调用onChangedobserve只被调用了2次,如果我点击ADD按钮(第3次(并返回片段,则永远不会调用,也永远不会刷新我的列表。我不知道为什么。

我尝试了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"

您应该从UsersFragmentonResume()而不是onCreateView()调用observe(),因为要添加新用户,您将切换到一个新的"活动",该活动会暂停当前活动及其附加的片段,而不是破坏片段的视图。因此,当您返回到当前活动时,UsersFragmentonCreateView()从未被调用,但onResume()被调用。

然而,我建议您实现一个适当的ViewModelRepository模式来与Room数据库通信。

最新更新