2016-07-05 5 views
3

ich diese Situation haben:Wie Aktivität sagen, dass Fragmente mit Netzwerk fertig sind ruft

  1. ich Haupttätigkeit bekam die Benutzer geöffnet wird, wenn er eine App eine Innen dieser Tätigkeit beginnen ist ein Viewpager neben Registerkarten oben Bar, so kann der Benutzer zwischen 4 Fragmenten navigieren.

  2. Jedes Fragment wird durch Nachrüstungen einig Netzwerk-Anforderung wie Last Nachrichten Daten, Last über Abschnitt zu tun usw.

I-Fragmente an Pager in klassischen Art und Weise bin Zugabe:

private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFrag(new WelcomeFragment(), "Home"); 
     adapter.addFrag(new NewsFragment(), "News"); 
     adapter.addFrag(new AboutFragment(), "About"); 
     adapter.addFrag(new Locators(), "Locations"); 


     viewPager.setAdapter(adapter); 
    } 

Netzwerk Aufrufe in Fragmenten werden durch Retrofit (Beispiel Anruf unten) erledigt.

NetworkSDK.getInstance().getNews(size, offset, new Callback<List<News>>() { 
     @Override 
     public void onResponse(Call<List<News>> call, Response<List<News>> response) { 
     } 

     @Override 
     public void onFailure(Call<List<News>> call, Throwable t) { 

     } 
    }); 

Jetzt möchte ich eine Art Fortschrittsbalken (Loader) implementieren, der sich auf Hauptaktivität dreht, bis alle 4 Fragmente mit Netzwerkaufrufen fertig sind. Wie kann ich die Hauptaktivität benachrichtigen, dass Fragmente von Netzwerkanrufen beendet sind? I

Antwort

0

Für die Kommunikation von einem Fragment bis zu seiner Aktivität können Sie eine Schnittstelle in der Fragment-Klasse definieren und sie in der Aktivität implementieren. Das Fragment erfasst die Schnittstellenimplementierung während seiner onAttach() - Lebenszyklusmethode und kann dann die Interface-Methoden aufrufen, um mit der Aktivität zu kommunizieren. Sie können über Schnittstellen mit der Aktivität kommunizieren. Check Communicate from Fragment to Activity official documentation..

Die erste Brute-Force-Lösung, die Ihnen in den Sinn kommt, ist, dass Sie in der Aktivität 4 Booleans haben können. Die Verwendung von Schnittstellen kommuniziert mit der Aktivität. Wenn jeder von ihnen die Daten empfängt, setze das entsprechende bool auf wahr. Wenn alle 4 auf True gesetzt sind, schließen Sie den Dialog. Das folgende Code-Sniplet könnte eine bessere Vorstellung davon vermitteln, was ich vermitteln möchte.

bool a,b,c,d; 

public void setA(bool success) { 
    a = true; 
    closeDialogIfPossible(); 
} 

public void setB(bool success) { 
    b = true; 
    closeDialogIfPossible(); 
} 

... 

public void closeDialogIfPossible() { 
    if (a && b && c && d) { 
     // Close dialog here. 
    } 
}