[解決済み] Transformations.switchMapはどこでどのように使うのか?
質問
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から来るものです。
関連
-
[解決済み] TextViewでテキストを水平・垂直方向にセンタリングするには?
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] match_parentとfill_parentの違いは何ですか?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] edittextのテキストがメールアドレスかどうかを確認するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 設定ページに移動せずに位置情報サービスをオンにする
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] バイト配列の画像ファイルをビットマップに変換するには?
-
[解決済み] これはどういうことですか?失敗 [INSTALL_FAILED_CONTAINER_ERROR]?
-
[解決済み] Androidのadb logcatでTAG名で特定のメッセージを除外する方法は?
-
[解決済み] onCreate(Bundle savedInstanceState)とは?
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] google-services.jsonって実際何してるの?
-
[解決済み] WhatsAppでメッセージを送信する
-
[解決済み] map()メソッドとswitchMap()メソッドの違いは何ですか?