Android 未调用LiveData观察者
我有一个片段和一个对应的viewmodel类。我在fragmentAndroid 未调用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
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的更改方法时调用