問題タブ [android-architecture-lifecycle]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 異なるアクティビティにあるフラグメント間で ViewModel を共有する
SharedViewModel という名前の ViewModel があります。
Google の Arch ViewModel リファレンス ページにある SharedViewModel の例に基づいて実装しました。
アクティビティ内の 2 つ以上のフラグメントが互いに通信する必要があることはよくあります。両方のフラグメントがインターフェイスの説明を定義する必要があり、所有者アクティビティが 2 つをバインドする必要があるため、これは決して簡単なことではありません。さらに、両方のフラグメントは、他方のフラグメントがまだ作成されていない、または表示されていない場合を処理する必要があります。
と という 2 つのフラグメントがListFragment
ありDetailFragment
ます。
今まで、これら 2 つのフラグメントを と呼ばれるアクティビティ内で使用MasterActivity
していましたが、すべてうまくいきました。
で ViewModel を取得し、ListFragment
使用する値を選択しましたDetailFragment
。
ただし、場合によっては、ListFragment
(別のデバイス構成へのレイアウト) を という別のアクティビティに追加する必要がありますDetailActivity
。上記の例と同様にそれを行う方法はありますか?
android - ダガー: ダガーは、別のオブジェクトに依存しないオブジェクトに対して @inject コンストラクターを必要とするのはなぜですか?
私は何かが欠けていると思います。次のエラーが表示されます。
クラスを次のように想定します。
そしてクラスPostVM
そしてコンポーネント:
そして活動中:
ご覧のとおり、PostVM クラスの例は何にも依存していません。なぜ @inject コンストラクターが必要なのですか?
android - ViewModel と AndroidViewModel の違いは何ですか
この疑問をお持ちの方へ、
Androidのドキュメントによると、
ViewModel は特定のアクティビティとフラグメントのインスタンス化よりも長く存続するため、View や、アクティビティ コンテキストへの参照を保持する可能性のあるクラスを参照することはできません。ViewModel が Application コンテキストを必要とする場合 (たとえば、システム サービスを見つけるため)、AndroidViewModel クラスを拡張し、コンストラクターで Application を受け取るコンストラクターを持つことができます (Application クラスは Context を拡張するため)。
ドキュメントはこちらにあります: https://developer.android.com/topic/libraries/architecture/viewmodel.html
編集:説明の重複について:クラスをViewModelとAndroidViewModelに拡張できることを意味します。which を拡張する必要がある場合、上記の説明はそのためのものです。上記のリンクは、android.arch.lifecycle.ViewModel ではなく、一般的な MVVM アーキテクチャの ViewModel について説明しています。