Android ViewModelsについてアーキテクチャ上の質問があります:
私のアプリでは、(Viewpagerを使用して)2つのフラグメントを含むアクティビティがあります。 2つのフラグメントは異なる処理を実行します(したがって、独自のViewModelを持っている可能性があります)が、どちらも同様のさまざまなデータを必要とします。
これは、たとえば、ネットワーク接続が使用可能かどうか(および接続がない場合は両方のフラグメントに異なるエラーUIが表示される)、またはサーバーからプッシュ経由で来て両方のフラグメントに等しく影響するユーザー設定の状態です。
これは次のようになります。
今私の質問は、ViewModelsを使用するときにその状況に対処する方法ですか?ビューが複数のViewModelを監視するのは良いことです。たとえば、次のように、アクティビティのViewModel(両方が等しく必要な状態を保持)と各フラグメントに1つのViewModelがある場合のようになります。
これは here が示唆されましたが、 MVVMの関係 は一般的に
ビューn-1 ViewModel n-1モデル
しかし、私の場合、そのような共有LiveDataの適切な場所がどこにあるのかわかりませんか?
ViewModelの背後にあるコンセプトは、「View」ではなく、単一の「Screen」に関連することになっていると思います。 「。したがって、そのロジックでは、複数のフラグメントが同じViewModelを参照している場合、技術的には同じ「Screen」に属するため、同じViewModelを使用できると思います。
フラグメントでは、LiveDataのインスタンスを保持するViewModelのアクティビティを要求し、必要に応じて更新を提供できます。
これがあなたの質問に答えることを願っています。
更新: Googleサンプルのサンプルフラグメントへのリンク が見つかりました。 onCreateView()メソッドをチェックしてください。参考のために以下のコードを貼り付けます:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View root = inflater.inflate(R.layout.addtask_frag, container, false);
if (mViewDataBinding == null) {
mViewDataBinding = AddtaskFragBinding.bind(root);
}
mViewModel = AddEditTaskActivity.obtainViewModel(getActivity());
mViewDataBinding.setViewmodel(mViewModel);
setHasOptionsMenu(true);
setRetainInstance(false);
return mViewDataBinding.getRoot();
}
追伸より良い解決策/答え/練習を見つけたなら、lemmeは知っています。