Android 未调用LiveData观察者

Android 未调用LiveData观察者,android,android-livedata,Android,Android Livedata,我有一个片段和一个对应的viewmodel类。我在fragmentonActivityCreated方法上从DB获取了包装为LiveData的联系人列表。它工作正常,我使用PagedListAdapter显示联系人列表,如下所示: var allContacts: LiveData<PagedList<Contact>>? = null fun initData() { val factory = repo.getContacts() allContact

我有一个片段和一个对应的viewmodel类。我在fragment
onActivityCreated
方法上从DB获取了包装为LiveData的联系人列表。它工作正常,我使用PagedListAdapter显示联系人列表,如下所示:

var allContacts: LiveData<PagedList<Contact>>? = null
fun initData() {
    val factory = repo.getContacts()
    allContacts = LivePagedListBuilder(factory, PagedList.Config.Builder()
            .setEnablePlaceholders(true)
            .setPageSize(Constant.CONTACT_LIST_PAGE_SIZE)
            .build()).build()
}
var allContacts:LiveData?=无效的
fun initData(){
val factory=repo.getContacts()
allContacts=LivePagedListBuilder(工厂,PagedList.Config.Builder()
.setEnablePlaceholders(true)
.setPageSize(常数。联系人列表页面大小)
.build()).build()
}
我在片段中添加了一个观察者,如下所示:

viewModel.allContacts?.observe(this, Observer<PagedList<Contact>> {
        dataChanged()
    })
viewModel.allContacts?观察(此,观察者{
数据更改()
})
在我的片段中有一个按钮,它把我带到另一个屏幕,在那个屏幕上我向表中添加了更多联系人。但当我从那个屏幕回到我的片段时,观察者并没有被调用。这意味着我回来时不会调用
dataChanged()
方法

我知道,当我从片段转到另一个活动时,观察者变得不活动,但当我返回时,它再次变为活动。因此,根据文件:

通常,LiveData仅在数据更改时提供更新,并且仅向活动的观察者提供更新此行为的一个例外是,观察者从非活动状态更改为活动状态时也会收到更新。此外,如果观察者第二次从非活动状态变为活动状态,则仅当值自上次变为活动状态以来发生了变化时,它才会收到更新


我原以为观察员会被叫来,但事实并非如此。我错过了什么吗。我正在使用我的数据库实现空间。

如何创建模型?尝试使用片段的活动而不是片段来执行此操作:

viewModel = ViewModelProviders.of(activityOfYourFragment).get(YourViewModelClass.class);

使用活动视图模型,而不是创建新的viewModel实例。下面的代码将帮助您


val模型:MyViewModel by activityViewModels()

您找到解决方案了吗?现在我面临着同样的问题找到了解决方案?Observer还取决于,您在房间中插入数据的方式,比如如果您使用repository方法,那么它将在更改方法时调用,但如果您使用getOpenHelper().getWritableDatabase().execSQL(anyQuery)来更改房间数据库中的数据,那么它将不会在Observer的更改方法时调用