【发布时间】:2018-11-21 23:08:21
【问题描述】:
将MutableList 包装在LiveData 或MutableLiveData 中的推荐方法是什么,以便可以修改列表并观察其发生的变化?
我在 Room 中有一些相当短的表(MutableList,并通过将这个类包装在MutableLiveData 或LiveData 中使其可观察。然后通过更新这些选择中的项目,我可以在大表上触发必要的查询。
目前我的代码具有以下结构,我已在我的问题中将其简化为我认为相关的内容。最终我想在更复杂的查询中使用多个keyset。我的简化模型文件如下,
class Model(application : Application) : AndroidViewModel(application)
{
val keys : LiveData<List<Key>>
val keyset : LiveData<MutableList<Key>>
val values : LiveData<List<Value>>
init {
keys = repository.keys
values = repository.values
keyset = mutableListOf<Key>() // I'm not entirely sure how to instantiate LiveData<MutableList<Key>>
}
}
它依赖于存储库,
class Repository(private val queryset : QuerySet)
{
val keys : LiveData<List<Key>> = queryset.getKeys()
val values : LiveData<List<Value>> = queryset.getValues()
}
依赖于查询集
@Dao
class QuerySet(application : Application) : AndroidViewModel(application)
{
@Query("SELECT * FROM KeyEntity")
fun getKeys() : LiveData<list<Key>>
@Query("SELECT * FROM ValueEntity WHERE key in (:keys)")
fun getValues(keys : MutableList<Key>) : LiveData<list<Value>>
}
Key 和 Value 类只是 KeyEntity 和 ValueEntity 的 POJO,并且只需指定相同的字段。
我应该为此使用MutableLiveData 或LiveData 吗?如果是这样,应该如何实现 keyset ?也许有更规范的方式这样做?
【问题讨论】:
标签: kotlin android-livedata mutablelivedata mutablelist