1. ホーム
  2. android

[解決済み] Transformations.switchMapはどこでどのように使うのか?

2023-03-26 05:55:28

質問

Googleが最近リリースしたAndroid Architecture Componentsのライブラリでは、2つの静的関数が Transformations クラスで使用されています。一方 map 関数は単純明快で簡単に理解できますが、私は switchMap 関数を正しく理解するのは難しいと感じています。

switchMapの公式ドキュメントはこちらです。 にあります。 .

誰か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を呼び出して、そのユーザーに1人のフォロワーを追加するので、そのユーザーは300人ではなく301人のフォロワーを持つことになります。 userLiveData には、リポジトリから来るこの更新があり、それはDAOから来るものです。