Ich möchte ein MVP-Muster für die folgenden implementieren:
Meine Ansicht ist ein Listenfragment mit einer Liste.
Mein Modell sind die Daten, die in der Liste angezeigt werden, die von Netzwerkaufrufen stammen.
Mein Controller ist derjenige, der die Daten zwischen Ansicht und Modell übergibt.
Mein Fluss ist:
1) Ich mache eine Netzwerkanfrage und bekomme eine Antwort zurück, die ich zeige ~ 20 Elemente. Jeder Gegenstand hat eine Liste von URLs von Gegenständen (~ 70).
2) Beim Klick auf ein Element gehe ich in eine Schleife und übergebe an eine Volley-Queue Anfragen für jede dieser URLs (also im Wesentlichen) ~ 70 Volley-Anfragen werden nacheinander abgesendet. Als ich jede Antwort bekomme, aktualisiere ich meinen Adapter.Implementieren Sie MVP für die Übergabe von Daten aus dem Netzwerk zu Listenansichten
Frage:
Wie kann ich konvertieren (2), so dass ich den MVP verwenden und die Ansicht über eine Art von Callback-Mechanismus aktualisieren? Ich nehme an, es ist keine gute Idee, für jede dieser Antworten zu callen und onNotifyDataSetChanged()
70 mal zu wählen
Was ist die beste Praxis dafür?
mehr Kontext Balg
Ich habe eine Anwendung, die von 2 Listen Fragmenten und 1 einfachen Fragmente mit einer Layout-Ansicht zusammengesetzt ist.
Erste Liste Fragment zeigt eine Liste von ~ 20 Elemente.
Jedes Objekt, auf das geklickt wird, führt zu einem Netzwerkanruf, der von einem Server ~ 70 Elemente (max), die in einer anderen Liste im zweiten Listenfragment angezeigt werden, bringt.
Sobald der Benutzer auf die Listenelementdaten klickt, die für dieses Element spezifisch sind, werden sie aus dem Netzwerk abgerufen und im letzten Fragment angezeigt.
Also im Grunde ist die erste Liste auf Daten "gebrochen". Aber die Punkte in der zweiten Liste sind nicht mehr als ~ 70.
Design:
Ich habe Volley Queue für die Netzwerkaufrufe verwendet und funktionell funktioniert es gut und ich zeige die Daten, die ich brauche, gut.
Ich habe der Volleyanforderung einen Listener hinzugefügt und von meinem Listener aktualisiere ich meine Adapter.
Der Vorteil ist, dass als Antwort komme ich sie durch Benachrichtigung meines Adapters anzeigen, so dass der Benutzer nicht warten muss, bis alle 70 Anforderungen abgeschlossen sind, bevor Daten angezeigt werden.
Problem:
Aufgrund der Tatsache, dass beim Klicken des ersten Fragments als ich zum zweiten verschiebe ich diese Back-End-Anrufe starten und als ich in den dritten gehe diese Anrufe anstehen (ich kann es in dem sehen Logs), wenn ich zum dritten Fragment gehe, werden die Anrufe für den Rest der Gegenstände weiter geschossen und dasselbe, wenn ich zurück zum ersten gehe.
Aufgrund der Tatsache, dass ich die Antworten für diese Anfragen von der Volley in den Adaptern bekomme und das tatsächliche Fragment möglicherweise nicht mehr "relevant" ist, wie kann ich das besser gestalten?
Ich denke, irgendeine Art von Modell-Ansicht-Muster, aber in meinem Fall möchte ich nicht auf alle Netzwerkaufrufe zu beenden, um die Daten von meinem Modell (vorzugsweise) zu erhalten
Wie kann ich diesen Beitrag verbessern? Kann mir jemand sagen, ob mein Beitrag nicht sehr hilfreich ist oder das, was ich beschreibe, kein allgemeines Problem ist? – Jim