Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 在LiveData或MutableLiveData中包装MutableList_Kotlin_Android Livedata_Mutablelivedata_Mutablelist - Fatal编程技术网

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
  ... }
... }