3

Googleが最近リリースしたAndroid Architecture Componentsライブラリでは、Transformationsクラスに2つの静的関数があります。 map機能は簡単でわかりやすいですが、switchMapの機能を正しく理解することは難しいです。Transformations.switchMapの使用方法と場所

switchMapの公式ドキュメントはhereです。

実際にswitchMap関数をどのように、どこで使用するのか、誰かが説明できますか? map()機能毎回

LiveData userLiveData = ...; 
LiveData userName = Transformations.map(userLiveData, user -> { 
    return user.firstName + " " + user.lastName; // Returns String 
}); 

答えて

2

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)だけのマップ機能と同様に、呼び出されます。しかしrepository.getUserById(id)LiveDataを返します。したがって、LiveDataの値がrepository.getUserById(id)によって返されるたびに、userLiveDataの値も変更されます。したがって、userLiveDataの値は、userIdLiveDataの変更とrepository.getUserById(id)の値の変更に依存します。

具体的な例switchMap():フォローボタンと別のプロファイル情報を設定する次のプロファイルボタンがあるユーザープロフィールがあるとします。次のプロファイルボタンは、別のIDでsetUserId()を呼び出すため、userLiveDataが変更され、UIが変更されます。 [フォロー]ボタンをクリックすると、そのユーザーに1人のフォロワーが追加され、300人ではなく301人のフォロワーが追加されます。userLiveDataには、DAOからのリポジトリからのこの更新が含まれます。

関連する問題