我有一个带有以下类的Android应用:
ListActivity
在Item
ListView
个对象
DetailActivity
应该使用另一个ListView
Item
是我的对象,其中包含field1
,field2
等
ListActivity
在用户单击DetailActivity
项目时使用意图的多余参数传递给itemId
ListActivity
。
流应为:
DetailActivity
实例化DetailViewModel
并传递itemId
DetailViewModel
从Repository
获取由提供的LiveData<Item>
标识的itemId
对象DetailViewModel
使用List<NameValueBean>
字段(LiveData<Item>
)创建propertiesList.add(new NameValueBean("field1", item.getField1()); ...
DetailActivity
观察List<NameValueBean>
并用它来喂DetailAdapter
,它是详细信息ListView
的控制者问题在于,List<NameValueBean>
应该是可观察的,LiveData<List<NameValueBean>>
应该是每次LiveData<Item>
更改时创建的numberL :: [String] -> [String]
numberL [] = []
numberL (x:xs) = ([show (length(x:xs)) ++ ": " ++ x] ++ numberL (xs))
。
我该怎么办?我认为有一个转换可以执行,但是我不知道该如何实现。
答案 0 :(得分:2)
Transformations.map
函数是您最好的选择。
要提供更多背景信息,Transformations.map
将使用LiveData<T>
,执行转换并将其转换为LiveData<Y>
。
该方法采用LiveData<T>
,并且lambda的目的是将LiveData
T
发出的值转换为新值Y
。
Transformations.map
将获取给定LiveData<T>
发出的值,然后映射并返回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()
}
}
答案 1 :(得分:0)
您应该在观察“活动”中的LiveData<Item>
之后执行该过程。