在Google发布的最新Android体系结构组件库中,我们在Transformations
类中具有两个静态函数。尽管map
函数简单易懂,但我发现很难正确理解switchMap
函数。
switchMap的官方文档可以在here中找到。
有人可以通过一个实际的例子来解释如何以及在哪里使用switchMap函数吗?
最佳答案
在map()
函数中
LiveData userLiveData = ...;
LiveData userName = Transformations.map(userLiveData, user -> {
return user.firstName + " " + user.lastName; // Returns String
});
每次
userLiveData
的值更改时,userName
也会被更新。注意,我们正在返回String
。在
switchMap()
函数中:MutableLiveData userIdLiveData = ...;
LiveData userLiveData = Transformations.switchMap(userIdLiveData, id ->
repository.getUserById(id)); // Returns LiveData
void setUserId(String userId) {
this.userIdLiveData.setValue(userId);
}
每次
userIdLiveData
的值更改时,都会调用repository.getUserById(id)
,就像map函数一样。但是repository.getUserById(id)
返回LiveData
。因此,每次LiveData
返回的repository.getUserById(id)
的值更改时,userLiveData
的值也将更改。因此userLiveData
的值将取决于userIdLiveData
的变化和repository.getUserById(id)
的值的变化。switchMap()
的实际示例:假设您有一个用户配置文件,该用户配置文件带有“跟随”按钮和设置另一个配置文件信息的“下一个配置文件”按钮。下一个配置文件按钮将使用另一个ID调用setUserId(),因此userLiveData
将会更改,UI也会更改。 “关注”按钮将调用DAO,向该用户添加一个关注者,因此该用户将拥有301个关注者,而不是300个关注者。userLiveData
将具有来自存储库的更新,该更新来自DAO。