web-dev-qa-db-ja.com

Android MVVM ArchitectureでViewModelからダイアログを表示

新しいアーキテクチャコンポーネントを備えたMVVMについて、たとえば、VMで発生したアクションの3つのオプションを含むダイアログをアプリで表示する必要がある場合、どのように実装すればよいですか?ダイアログを表示するコマンドをアクティビティ/フラグメントに送信する責任は誰にありますか?

22
lucasb.aquino

新しいアクティビティを開く、ダイアログを表示するなどのUI関連のアクションは、ViewModelではなくビュー(アクティビティまたはフラグメント)からトリガーされます。 ViewModelには、リークを防ぎ、プレゼンテーションレイヤーを「リアクティブ」に保つためのビューへの参照がありません。

ビュー(アクティビティまたはフラグメント)をViewModelのオブザーバブルにサブスクライブして、ビューが変更されたときにダイアログまたは新しいアクティビティをビューから開始できるようにすることができます。

編集:これは簡単ではないので、これについての記事を書きました。状態の一部としてイベントをモデル化し、ナビゲーションなどのアクションにイベントラッパーを使用することをお勧めします。 https://medium.com/google-developers/livedata-with-snackbar-navigation-and-other- events-the-singleliveevent-case-ac262267315

34
Jose Alcérreca