Erstens, ich weiß, dass es mit Model View Presenter verschiedene Implementierungen gibt, und meiner Meinung nach, solange Sie die Ebenen der Abstraktion klar definiert haben und dann ihre Rollen übernehmen Implementieren Sie dieses Muster ist offen für die Interpretation. Ich habe dieses Muster in vielen Apps implementiert, wo es nur eine Activity
gab. Ich habe jetzt ein neues Projekt gestartet, das mehrere Aktivitäten hat und angefügt Fragments
, einschließlich verschachtelte Fragmente (ViewPager
).Mehrere Aktivitäten/Fragmente und die Modellansicht Presenter-Muster
Ich versuche jetzt, den MVP zu diesem Projekt zu übersetzen, und ich habe eine Konzeptwand getroffen und möchte einige Anleitung und Einblicke.
Bisher habe ich die obige Struktur erstellt und begonnen, eine 1: 1-Beziehung mit View & Presenter (unabhängig von Activity
oder Fragment
) zu tun. Ich fühle, dass dies in Ordnung ist, wenn ich zum Beispiel eine Anfrage von einem Activity
View an seinen Presenter gesendet habe, der ein Ergebnis an die Activity
zurückgibt. Wie würde ich das Propagieren des Ergebnisses durchführen, dh alle anderen Aktivitäten/Fragmente aktualisieren das sind derzeit nicht in einem Paused()
oder Stop()
Zustand. Ich denke, in diesem Fall sollte es einen zentralen Moderator geben, der alle notwendigen Aktivitäts- und Fragmentansichten aktualisiert, aber ich bin mir nicht sicher, wie ich das machen soll.
Zeit, wenn jeder Activity
und Fragment
erstellt es eine neue Instanz eines Presenter-Klasse erstellt, als Referenz an sich vorbei (die Aktivitäten und Fragmente implementieren ihre eigenen Schnittstellen), die den Moderator speichert als WeakReference
und kann die aufrufen relevante Schnittstellenmethoden beim Zurückgeben eines Ergebnisses.
Laut der Dokumentation wann immer Fragments
miteinander kommunizieren möchten und die beigefügten Activity
sollten Sie eine Callback-Schnittstelle verwenden. In diesem Sinne sollte ich eine Callback-Schnittstelle haben, die die Aktivität implementiert und die Fragments
Callback zu, wann immer sie etwas anfordern, so dass im Wesentlichen nur die Aktivität einen Presenter und Model-Layer haben würde, die die Fragmente zurückrufen müssen, um verschiedene Anfragen zu machen ?
Tut mir leid, wenn das ein wenig durcheinander klingt, hoffentlich ist das klar genug, um zu verstehen, was ich erreichen will, und wenn ich in die richtige Richtung denke ... oder völlig daneben!
Danke für Ihre Kommentare und Gedanken. Ich denke, ich werde den Presenter nur mit der Activity verwenden und die Fragmente aktualisieren lassen. Speicherlecks mit einem Singleton? Dies würde nur passieren, wenn der Singleton einen Verweis auf eine Aktivität oder ein Fragment hätte (im Grunde etwas mit einem Lebenszyklus, der kommen und gehen kann)? Wenn ja, verwende ich ein Singleton für etwas anderes, aber es enthält keine Referenzen. Ich benutze 'WeakReferences' mit Aktivitäten und Fragmenten (alles mit Lebenszyklus-Callbacks), da ich nicht' null' habe. Starke Referenzen auf Konfigurationsänderungen und die 'WeakReference' erlauben GC –
Wenn Ihr Moderator kein Singleton ist, dann sollten Sie nicht ' Es gibt Probleme mit Konfigurationsänderungen, da der Präsentator selbst ebenfalls neu erstellt wird. Möglicherweise benötigen Sie eine 'WeakReference', wenn Sie jedoch ein beibehaltenes Fragment verwenden. Wie auch immer, es scheint, dass Sie klar verstehen, wie schwache Referenzen funktionieren, also muss ich das nicht erklären. Danke. –
Nein, der Moderator ist kein Singleton. Nachdem der Moderator erstellt wurde, speichere ich eine Referenz in einer 'HashMap innerhalb des nicht beibehaltenen Header-Fragments und lade seine Referenz bei Konfigurationsänderungen mit der Aktivität zurück. ... Gerade wenn ich denke, ich verstehe etwas in Java, scheint es mir immer einen Kurvenball zu werfen! Danke für deinen Rat. –