Kotlin 在LiveData或MutableLiveData中包装MutableList
在Kotlin 在LiveData或MutableLiveData中包装MutableList,kotlin,android-livedata,mutablelivedata,mutablelist,Kotlin,Android Livedata,Mutablelivedata,Mutablelist,在LiveData或MutableLiveData中包装MutableList的建议方法是什么,以便可以修改列表并观察其所经历的更改 我有一些相当短的表(LiveData和MutableLiveData) 我不确定是否必须将我的MutableList包装为LiveData或MutableLiveData,其中POJO是一个数据库实体或代理一个或多个数据库实体的数据类的实例。简洁地解释了这两个类之间的区别。我也不确定如何安装对它们进行初始化。下面创建了实例,但是键集的值被初始化为null,并且必须
LiveData
或MutableLiveData
中包装MutableList
的建议方法是什么,以便可以修改列表并观察其所经历的更改
我有一些相当短的表(LiveData和MutableLiveData)
我不确定是否必须将我的MutableList
包装为LiveData
或MutableLiveData
,其中POJO
是一个数据库实体或代理一个或多个数据库实体的数据类的实例。简洁地解释了这两个类之间的区别。我也不确定如何安装对它们进行初始化。下面创建了实例,但是键集
的值
被初始化为null
,并且必须为MutableLiveData
设置初始值
class Model(application : Application) : AndroidViewModel(application)
{ ...
val keyset : LiveData<MutableList<Key>>
init { ...
keyset = MutableLiveData<MutableList<Key>>() // Initialized as null
keyset.value = mutableListOf<Key>() // Assign an empty list
... }
... }
类模型(应用程序:应用程序):AndroidViewModel(应用程序)
{ ...
val键集:LiveData
初始化{。。。
keyset=MutableLiveData()//初始化为null
keyset.value=mutableListOf()//分配一个空列表
... }
... }
MutableLiveData
中有一个细微差别,它没有正式封装数据。也就是说,当它包装一个项目时,它不会公开包装的项目方法,因为它自己会在包装的项目被修改时发出通知。它只跟踪包装的项目何时被调出(请参阅)。提供了一个很好的方法来支持此操作
地点,地点,地点。。。
我不确定将keyset
属性正式放置在何处。提供了以下信息;结果证明我的路径正确
更新LiveData对象
LiveData没有公开可用的方法来更新存储的数据。
MutableLiveData类公开setValue(T)和postValue(T)方法,如果需要编辑LiveData对象中存储的值,则必须使用这些方法。
通常在ViewModel中使用可变LiveData,然后ViewModel只向观察者公开不可变的LiveData对象
询问
我还没有弄清楚的是如何触发值的更新
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>>
}
class Model(application : Application) : AndroidViewModel(application)
{ ...
val keyset : LiveData<MutableList<Key>>
init { ...
keyset = MutableLiveData<MutableList<Key>>() // Initialized as null
keyset.value = mutableListOf<Key>() // Assign an empty list
... }
... }