Android MVP mit Dolch 2 - Aktivität mit mehreren Fragmenten

9

Ich habe mir die Google Android Architecture Beispiele für MVP mit Dolch 2 angesehen:

Ссылка

Aber das Beispiel ist ziemlich trivial - jede Aktivität hat nur ein Fragment, und die Dolch-Komponente ist in der Aktivität eingebaut und wird verwendet, um die Aktivität mit dem Moderator für das Fragment zu injizieren.

Ich habe versucht, auf dieses Beispiel aufzubauen, um mehrere Fragmente zu einer Aktivität hinzuzufügen und zwischen ihnen zu navigieren. Da jedes Fragment einen eigenen Präsentator hat, habe ich das Gebäude der Dolchkomponente in das Fragment verschoben. So, jetzt habe ich:

  • FragmentCallback (eine Schnittstelle, die Methoden zum Laden von fragment1 und fragment2 bereitstellt)
  • Aktivität (implementiert FragmentCallback)
  • Fragment1 (implementiert die Ansichtsschnittstelle)
  • Fragment1Contract (definiert die Schnittstellen für Ansicht und Moderator)
  • Fragment1Presenter (implementiert die Presenter-Schnittstelle)
  • Fragment1Component (injiziert Fragment1)
  • Fragment1Module (stellt die Ansicht und den Moderator bereit)
  • Fragment2
  • Fragment2Contract (definiert die Schnittstellen für Ansichten und Präsentatoren)
  • Fragment2Presenter (implementiert die Presenter-Schnittstelle)
  • Fragment2Component (injiziert Fragment2)
  • Fragment2Module (stellt die Ansicht und den Präsentator zur Verfügung)

Die Aktivität tut sehr wenig, sie lädt nur das erste Fragment und implementiert FragmentCallback, mit dem die Ansicht zu einem anderen Fragment wechseln kann.

Das erste Fragment hat eine Schaltfläche, die das zweite Fragment mit dem FragmentCallback lädt - welches die Fragmente erhalten, indem sie die Aktivität über

werfen %Vor%

Bin ich hier auf einer vernünftigen Spur? Während der Code mit MVP sauber aussieht, fehlt mir etwas an den Dolch-Komponenten und Modulen.

Danke.

Aktualisieren

Ich habe meine Situation etwas verbessert, indem ich eine Komponente und ein Modul für die Aktivität erstellt habe. Jedes Fragment baut immer noch den Dagger-Kontext, aber ich injiziere nicht mehr die Ansicht (Fragment) in den Presenter-Konstruktor - wenn das Fragment den Kontext aufbaut, sich selbst injiziert (also den Moderator hat), ruft es presenter.init(this) auf, so dass der Moderator hat jetzt die Ansicht.

Dies reduziert die Anzahl der Klassen auf angenehme Weise und der nächste Schritt wäre, nur die Komponente in der Aktivität zu erstellen und das Fragment dazu zu verwenden, sich selbst zu injizieren (ohne eine neue Komponente erstellen zu müssen).

    
prule 20.10.2016, 03:31
quelle

1 Antwort

0

Sie sind definitiv auf dem richtigen Weg.

Ich würde vorschlagen, dass Sie keine einzelne Komponente in Activity verwenden, sondern eine separate Komponente pro Fragment instanziieren (selbst wenn die Komponenten identisch sind). Dieser Ansatz bietet zwei Vorteile:

  • Fragmente sind nicht an Activity und an andere Fragments von der Komponente selbst gekoppelt (und die Objekte, die die Komponente bei Verwendung von Bereichen zwischenspeichern kann)
  • Erlaubt eine feinkörnigere Verwendung von Bereichen (wenn Sie es jemals brauchen)

Offtopic:

Ich habe einen Blogbeitrag über geschrieben, warum Aktivitäten in Android keine UI-Elemente sind . Schauen Sie, und wenn Sie das Gefühl haben, dass es Sinn macht, dann gibt es einen Link zur alternativen Implementierung von MVP:)

    
Vasiliy 23.10.2016 09:51
quelle

Tags und Links