2017-04-17 6 views
3

Meine App hat eine Aktivität und zwei Fragmente. Die Aktivität wird nur als Fragmentcontainer verwendet. Eines der Fragmente zeigt Daten als Text. Das zweite Fragment zeigt dieselben Daten wie ein Diagramm. Diese Daten stammen von einer Remote-JSON-API. Wie in MVP müssen wir die gleiche Struktur für jede Ansicht replizieren (Modul, Modell, Presenter, Repository ...) Meine App fordert die Daten von der JSON-API für jedes Fragment, also zweimal. Wie kann ich eine effizientere Architektur haben, die es mir ermöglicht, den MVP zu respektieren?Android MVP mit zwei Fragmenten, die dieselben Daten teilen

Siehe unter dem Code für meine beiden Fragmente umgesetzt:

Modul

@Module 
public class PollutionLevelsModule { 
    @Provides 
     public PollutionLevelsFragmentMVP.Presenter providePollutionLevelsFragmentPresenter(PollutionLevelsFragmentMVP.Model pollutionLevelsModel) { 
     return new PollutionLevelsPresenter(pollutionLevelsModel); 
    } 

    @Provides 
    public PollutionLevelsFragmentMVP.Model providePollutionLevelsFragmentModel(Repository repository) { 
     return new PollutionLevelsModel(repository); 
    } 

    @Singleton 
    @Provides 
    public Repository provideRepo(PollutionApiService pollutionApiService) { 
     return new PollutionLevelsRepository(pollutionApiService); 
    } 
} 

Repository

public class PollutionLevelsRepository implements Repository { 
    private PollutionApiService pollutionApiService; 

    public PollutionLevelsRepository(PollutionApiService pollutionApiService) { 
     this.pollutionApiService = pollutionApiService; 
    } 

    @Override 
    public Observable<Aqicn> getDataFromNetwork(String city, String authToken) { 
     Observable<Aqicn> aqicn = pollutionApiService.getPollutionObservable(city, authToken); 

     return aqicn; 
    } 
} 
+0

http://stackoverflow.com/questions/34257883/mvp-for-activity-with-multiple-fragments?rq=1 – Manish

Antwort

3

Sie MVP in Ihrer Aktivität verwenden müssen, so dass nur ein einziges Mal Anforderung erfolgt JSON API. Danach können alle Fragmente, die von dieser Aktivität registriert werden, das bekommen.

+0

Vielen Dank. Also erhalte ich die Daten aus der API in meiner strukturierten MVP-Aktivität und sende diese abgerufenen Daten mithilfe eines Bündels an meine beiden Fragmente, oder? – Laurent

+0

ja, du hast Recht.Andere Lösung ist, dass Sie die Methode der Aktivität von Fragment auch anrufen können, um die Antwort zu erhalten. In beiden Fällen wird es gut funktionieren. –

+0

Vielen Dank für Ihre nützliche Antwort. – Laurent