8

まず、私は、どのようにモデルビュープレゼンターと異なる実装があり、そして私の心に限り、あなたは抽象化の層を持っていると明確に定義されていることを知っていて、その任命の役割をしていますこのパターンを実装するには解釈が可能です。私はかなりの数のアプリでこのパターンを実装していますが、そこにはただ一つのActivityがありました。私は今、複数のアクティビティを持ち、ネストされたフラグメント(ViewPager)を含むFragmentsという新しいプロジェクトを開始しました。複数のアクティビティ/フラグメントおよびモデルビュープレゼンターパターン

私は今、このプロジェクトにMVPを翻訳しようとしていると私はコンセプトの壁にヒットしましたし、いくつかのガイダンスや洞察をしたいと思います。

これまでのところ、上記の構造を作成し、表示&プレゼンターとの1:1の関係を開始しました(ActivityまたはFragmentに関係なく)。私はこれがOKだと思っていますが、例えば、私がActivityから何かをするリクエストを送った場合、その結果をに返すプレゼンターへの表示結果を伝播する方法、つまり他のすべてのアクティビティ/フラグメント現在はPaused()またはStop()の状態ではありません。このケースでは、すべての必要なアクティビティーとフラグメントビューを更新する中央のPresenterが必要ですが、これを行う方法についてはわかりません。

現在各ActivityFragmentが作成されるとき、それは、(アクティビティおよびフラグメントは、独自のインタフェースを実装する)を基準として自身を渡し、プレゼンタークラスの新しいインスタンスを作成するプレゼンタ格納WeakReferenceなどと呼び出すことができ結果を返すときは、関連するインタフェースメソッド。 Fragmentsあなたはコールバックインタフェースを使用する必要があり、相互に通信したいとActivity添付いつでもドキュメントによると

。これを念頭に置いて、アクティビティが実装するコールバックインターフェイスと、何かを要求するたびにFragmentsコールバックを持つ必要があります。つまり、アクティビティのみが、プレゼンタとモデルレイヤを持ち、さまざまな要求を行うためにコールバックする必要があります?これは少し混乱に聞こえる場合

申し訳ありませんが、うまくいけば、これは私が達成したいかを理解するために十分明確である、と私は右の線に沿って考えているならば...または完全にマークオフ!

答えて

1

私は、これは活動の内部プレゼンターを持ってしても大丈夫だと思います。基本的に活動はコントローラのようなもので、発表者について知っておくべきです。

活動や他のフラグメントは、あまりにもそれを必要とする場合にはフラグメント内のプレゼンターを置くことは誤りです。このプレゼンターがフラグメント用に特別に設計されている場合にのみ、プレゼンターをフラグメント内に置くことができます。プレゼンターの弱い参照として保存すると、関連するインタフェースのメソッドを呼び出すことができ、結果を返す

は、なぜあなたはここにWeakReferenceが必要なのです

? 1対1の関係がある場合は、プレゼンターが自分のライフサイクルを持っていないと仮定します。つまり、ライフサイクルはアクティビティまたはフラグメントに依存します。シングルトンではないのでメモリリークのリスクはありません。強い参照を持つことは安全でなければなりません。

私はそれは私には少し幅広い見えるので、私はあなたの質問に答えかはわかりません。私の指摘は、断片は単に活動の「部分」に分かれているため、断片を部分として扱うべきだということです。プレゼンターがこの部分にのみ属している場合は、内部にあるはずです。さもなければそれは活動にあるべきです。アクティビティへのアクセスにinterfaceを使用することは正しいですが、これはGoogleがその例で使用するよく知られた設計アプローチです。

+0

ご意見や考えをありがとう。私は、アクティビティでPresenterを使用して、そのフラグメントを更新するようにします。シングルトンでメモリリーク?これは、シングルトンがアクティビティまたはフラグメント(基本的にライフサイクルが出てきているもの)への参照を持っていた場合にのみ発生します。もしそうなら、私は何かのためにシングルトンを使用しますが、参照はありません。私は構成の変更に 'null'なので強い参照する必要はありませんように私は活動およびフラグメントと' WeakReferences'(ライフサイクルコールバックを使って何を)使用し、 'WeakReference'はGC –

+0

することができますあなたのプレゼンターがシングルトンでないなら、あなたは「shouldn発表者自身も再作成されるため、構成の変更に関する問題はありません。ただし、保持されたフラグメントを使用する場合は、WeakReferenceが必要になることがあります。とにかく、弱い参照がどのように機能するかをはっきりと理解しているようですので、説明する必要はありません。ありがとうございます。プレゼンターは私は 'のHashMap <文字列オブジェクト>'レス内断片を保持し、そしてバック活性を有する構成の変更への参照を取得におけるそれの参照を格納作成された後 –

+0

いいえプレゼンターは、シングルトンではありません。 ...私がJavaで何かを理解していると思うときは、いつも私にカーボールを投げているようです!アドバイスありがとうございます。 –

1

いや、もういないインタフェース。あなたはhereまたはBusのいくつかの種類(Otto -deprecatedまたはEventBusを)説明するように、すべてのビューを更新するためにRxJava Observablesを使用しますか。そして、あなたはそれが好きになるでしょう。

+1

あなたのコメントをありがとう、私はこれらを簡単に見てきました。私はパターンの解決策やコンセプトを探していました。私はこの、または遠くそれから、問題を解決するため、他のライブラリを使用しないことないんだけど、私は良い理解が前にまっすぐにあなたのための複雑さの多くを扱うこれらの他のライブラリを使用してに飛び込む把握するために、私は、その重要なのだと思います。 –

+0

©ライブラリというよりは、リアクティブプログラミング手法と呼んでいます。そして、近い将来、Rxからもう逃げ出すための方法はもう見当たりません。 –

+0

私はReactive programming/RxJavaを見ていきます。今のところ私にとってはこのプロジェクトはホスティング活動を通してコミュニケーションを取ることは問題ではありません。私はあなたの意見を尊重していますが、リアクティブプログラミングを「逃れる」方法がないというあなたの考えを分かち合いません。 –

関連する問題