LiveData 和转换使用
LiveData and Transformation usage
我有一个 Android 应用程序 类:
ListActivity
显示 ListView
中的所有 Item
个对象
DetailActivity
应该显示对象的所有属性,使用另一个 ListView
Item
是我的对象,其中包含 field1
、field2
等
当用户单击 ListActivity
项目时,ListActivity
使用意图的额外参数传递给 DetailActivity
itemId
。
流程应该是:
DetailActivity
实例化 DetailViewModel
传递 itemId
DetailViewModel
从 Repository
获取由提供的 itemId
标识的 LiveData<Item>
对象
DetailViewModel
使用 LiveData<Item>
字段创建 List<NameValueBean>
(propertiesList.add(new NameValueBean("field1", item.getField1()); ...
)
DetailActivity
观察 List<NameValueBean>
并用它来喂养 DetailAdapter
是细节的控制器 ListView
问题是 List<NameValueBean>
应该是可观察的,所以应该是 LiveData<List<NameValueBean>>
,每次 LiveData<Item>
更改时创建。
我怎样才能得到它?我想有一个 Transformation 要做,但我不明白如何实现它。
您应该在 Activity 中观察您的 LiveData<Item>
后执行该过程。
Transformations.map
函数是实现此目的的最佳选择。
为了提供更多上下文,Transformations.map
将采用 LiveData<T>
,执行转换并将其变成 LiveData<Y>
。
该方法采用 LiveData<T>
和一个 lambda,其目的是将 LiveData
、T
发出的值转换为新值 Y
。
Transformations.map
将获取给定 LiveData<T>
发出的值并映射 return 一个 LiveData<Y>
.
注意:此转换将在主线程上完成。
来源:https://developer.android.com/reference/android/arch/lifecycle/Transformations#map
快速回答:
fun getNameValueBeanLiveData(itemId: Int): LiveData<List<NameValueBean> {
val itemLiveData: LiveData<Item> = repository.getItemLiveData(itemId)
return Transformations.map(itemLiveData) { item ->
val nameValueBeanList = mutableListOf<NameValueBean>()
return nameValueBeanList.apply {
add("field1", item.field1)
add("field2", item.field2)
...
}.toList()
}
}
我有一个 Android 应用程序 类:
ListActivity
显示ListView
中的所有 DetailActivity
应该显示对象的所有属性,使用另一个ListView
Item
是我的对象,其中包含field1
、field2
等
Item
个对象
ListActivity
项目时,ListActivity
使用意图的额外参数传递给 DetailActivity
itemId
。
流程应该是:
DetailActivity
实例化DetailViewModel
传递itemId
DetailViewModel
从Repository
获取由提供的itemId
标识的 DetailViewModel
使用LiveData<Item>
字段创建List<NameValueBean>
(propertiesList.add(new NameValueBean("field1", item.getField1()); ...
)DetailActivity
观察List<NameValueBean>
并用它来喂养DetailAdapter
是细节的控制器ListView
LiveData<Item>
对象
问题是 List<NameValueBean>
应该是可观察的,所以应该是 LiveData<List<NameValueBean>>
,每次 LiveData<Item>
更改时创建。
我怎样才能得到它?我想有一个 Transformation 要做,但我不明白如何实现它。
您应该在 Activity 中观察您的 LiveData<Item>
后执行该过程。
Transformations.map
函数是实现此目的的最佳选择。
为了提供更多上下文,Transformations.map
将采用 LiveData<T>
,执行转换并将其变成 LiveData<Y>
。
该方法采用 LiveData<T>
和一个 lambda,其目的是将 LiveData
、T
发出的值转换为新值 Y
。
Transformations.map
将获取给定 LiveData<T>
发出的值并映射 return 一个 LiveData<Y>
.
注意:此转换将在主线程上完成。
来源:https://developer.android.com/reference/android/arch/lifecycle/Transformations#map
快速回答:
fun getNameValueBeanLiveData(itemId: Int): LiveData<List<NameValueBean> {
val itemLiveData: LiveData<Item> = repository.getItemLiveData(itemId)
return Transformations.map(itemLiveData) { item ->
val nameValueBeanList = mutableListOf<NameValueBean>()
return nameValueBeanList.apply {
add("field1", item.field1)
add("field2", item.field2)
...
}.toList()
}
}