观察另一个 ViewModel 的 ViewModel
ViewModel that Observes another ViewModel
我有一个 DAO returns 这个:
@Query(value = "SELECT * FROM users")
fun getUsers(): LiveData<List<User>>
我需要观察这个并将 User
个对象转换为 People
个对象。 People
没有实现或扩展 User
,但我有一个方法可以转换它们。这是我无法改变的要求。
fun convert(user: User): Person {...}
这就是我试图观察数据的方式。
class UserViewModel : ViewModel {
private lateinit var people: MutableLive<List<People>>
init {
db.getUsers().observe(this, Observer { userList ->
if(userList != null)
// here I need to do some sort of transformation.
}
}
// what activity will observer
fun getPeople() : MutableLive<List<People>> {
return people
}
}
所以如果 Activity
能够观察到 people: MutableLive<List<People>>
并且不知道这种转变正在发生,我会很高兴。
请帮忙。
这就是 Transformations.map
所做的,在您的示例中,您可以使用它来执行如下操作:
class UserViewModel : ViewModel() {
private lateinit var people: LiveData<List<Person>>
init {
people = Transformations.map(db.getUsers()) { users ->
users.map { user -> convert(user) }
}
}
}
这为您提供了一个 LiveData
,它来源于原始数据,但将给定的映射函数应用于它发出的数据,而且生命周期意识也得到了适当的维护。
我有一个 DAO returns 这个:
@Query(value = "SELECT * FROM users")
fun getUsers(): LiveData<List<User>>
我需要观察这个并将 User
个对象转换为 People
个对象。 People
没有实现或扩展 User
,但我有一个方法可以转换它们。这是我无法改变的要求。
fun convert(user: User): Person {...}
这就是我试图观察数据的方式。
class UserViewModel : ViewModel {
private lateinit var people: MutableLive<List<People>>
init {
db.getUsers().observe(this, Observer { userList ->
if(userList != null)
// here I need to do some sort of transformation.
}
}
// what activity will observer
fun getPeople() : MutableLive<List<People>> {
return people
}
}
所以如果 Activity
能够观察到 people: MutableLive<List<People>>
并且不知道这种转变正在发生,我会很高兴。
请帮忙。
这就是 Transformations.map
所做的,在您的示例中,您可以使用它来执行如下操作:
class UserViewModel : ViewModel() {
private lateinit var people: LiveData<List<Person>>
init {
people = Transformations.map(db.getUsers()) { users ->
users.map { user -> convert(user) }
}
}
}
这为您提供了一个 LiveData
,它来源于原始数据,但将给定的映射函数应用于它发出的数据,而且生命周期意识也得到了适当的维护。