2

Androidで新しいアーキテクチャコンポーネントを使用しようとしていますが、これまでのところうまくいきました。しかし、私は建築上の問題に遭遇しました。AndroidアーキテクチャのコンポーネントViewModelのコンテキストの問題

A,B、およびCのようなフラグメントをホストするMainActivityがあります。今までは、ViewModel(VM)が必要なときはいつも、MainActivityというコンテキストで(MyViewModel vm = ViewModelProviders.of(getActivity()).get(MyViewModel.class);のように)フェッチしました。今、このことを考慮してください。

  • 断片Cは、ユーザーがいくつかの値を選択することができますし、​​に書き込みます。
  • フラグメントAはフラグメントCを使用してユーザーに値を選択させ、次にAは値を​​から直接読み取り、そのUIに表示します。
  • フラグメントBは、フラグメントAと同じ方法を使用します。

問題が​​以来MainActivityのコンテキストで常にあること、であるフラグメントAB前に使用されている場合は、値がまだ利用できるようになります、とBは、いくつかの古いデータが表示されます。

私が見る最も明白な解決策は、それぞれABの文脈で​​を作成することです。しかし、私はフラグメントCがそれらを​​にアクセスさせる方法を理解できません。

私はまた、フラグメントCの文脈で​​を作成することもできますが、それは、私は素敵な解決策だとは思わないCのインスタンスを作成するフラグメントABを必要とします。

第3の解決策は、現時点でのアプローチを維持し、適切な場合に​​のデータをクリアすることですが、それも面倒です。

これについてはどのような方法が最適ですか?

答えて

0

VMでマッピングを行い、異なるキーの下にABの値を格納することができます。

したがって、Aが開始すると、Cは、そのA_keyを引数として渡します。ユーザーがCの値を選択すると、A_keyをキーとしてVMのマップに格納されます。 Aは、値が使用可能かどうかをチェックすると、A_keyの値だけをチェックします。

BB_keyと同じです。

+0

このような簡単な解決策 - ありがとう! –

関連する問題