观察另一个 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,它来源于原始数据,但将给定的映射函数应用于它发出的数据,而且生命周期意识也得到了适当的维护。