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:
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.
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).
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:
Activity
und an andere Fragments
von der Komponente selbst gekoppelt (und die Objekte, die die Komponente bei Verwendung von Bereichen zwischenspeichern kann) 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:)