如何在Android中更新实时数据值

时间:2018-08-23 09:38:23

标签: android android-livedata android-paging

我在应用程序中使用liveData。我做一个数据库查询,它返回存储在数据库中的LiveData<PagedList<Contact>>个联系人。

我想先修改此实时数据,然后再将其提供给观察者。假设LiveData列表中有十个联系人,我想与另一个列表进行一些比较,并设置LiveData列表中主要的联系人。

完成此操作后,我想将其提供给观察者。

例如-

val allContacts: LiveData<PagedList<Contact>> = getFromDB()

val list: ArrayList<String>() = list of some primary contacts

遍历allContactslist并设置allContacts中的哪些值与list中的值匹配。 allContacts中的哪个值匹配,它们的isPrimary属性将设置为true。

现在修改allContacts之后,我想将其提交给观察者,例如:

allContacts.observe(this, Observer(adapter::submitList))

我尝试过LiveData.transform,但是无法正确使用它。有人可以建议我如何使用transform方法或其他方法来实现它。

2 个答案:

答案 0 :(得分:0)

您正在寻找的是一种转变。使用Transformations.map()从将在每次首次LiveData更改时运行的函数创建新的LiveData。

例如

val allContacts: LiveData<PagedList<Contact>> = getFromDB()
val contactViewModel = Transformations.map(allContacts, {
    // Transform and create new list from old
})

答案 1 :(得分:0)

您的问题根源于您希望“拦截”将由数据库发布到LiveData对象的更新的事实。不管这是一种好方法,您都可以通过技术上的实现,方法是将DB返回的LiveData用您自己的LiveData子类包装。

换句话说。 UI-观察-> YourLiveData-观察-> DBLiveData

P.S。我认为一般来说,您可以通过修改数据库查询来解决问题,但这只是我假设您已经在其他一些表中拥有“主要联系人”