gpt4 book ai didi

android - LiveData 和转换使用

转载 作者:搜寻专家 更新时间:2023-11-01 09:22:40 29 4
gpt4 key购买 nike

我有一个包含这些类的 Android 应用:

  • ListActivity显示所有 Item ListView 中的对象

  • DetailActivity应该显示对象的所有属性,使用另一个 ListView

  • Item是我的对象,它包含 field1 , field2等等

ListActivity传递给 DetailActivity itemId当用户点击 ListActivity 时使用 Intent 的额外参数项目。

流程应该是:

  1. DetailActivity实例化 DetailViewModel通过 itemId
  2. DetailViewModelRepository 获取LiveData<Item>由提供的 itemId 标识的对象
  3. DetailViewModel创建一个 List<NameValueBean>使用 LiveData<Item>字段 ( propertiesList.add(new NameValueBean("field1", item.getField1()); ... )
  4. DetailActivity观察 List<NameValueBean>并用它来喂养 DetailAdapter这是细节的控制者ListView

问题是 List<NameValueBean>应该是可观察的,所以应该是 LiveData<List<NameValueBean>> , 每次创建 LiveData<Item>变化。

我怎样才能得到它?我认为有一个转换要做,但我不明白如何实现它。

最佳答案

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()
}
}

关于android - LiveData 和转换使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53449775/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com