2016-06-17 6 views
4

Ich habe eine Aktivität mit einer benutzerdefinierten Fußzeile mit 4 Schaltflächen erstellt.Wie wird mit Fragmenten umgegangen, die in Android neu geladen werden?

-Code für Fußzeilentasten onClick:

@Override 
public void onClick(View v) 
{ 
    try 
    { 
     switch (v.getId()) 
     { 
      case R.id.button1: 

        getSupportFragmentManager() 
          .beginTransaction() 
          .addToBackStack(null) 
          .replace(R.id.flcontent,Tab1) 
          .commit(); 

       break; 

      case R.id.button2: 

       getSupportFragmentManager() 
         .beginTransaction() 
         .addToBackStack(null) 
         .replace(R.id.flcontent,Tab2) 
         .commit(); 

       break; 

      case R.id.button3: 

       getSupportFragmentManager() 
         .beginTransaction() 
         .addToBackStack(null) 
         .replace(R.id.flcontent, Tab3) 
         .commit(); 

       break; 

      case R.id.button4: 


       getSupportFragmentManager() 
         .beginTransaction() 
         .addToBackStack(null) 
         .replace(R.id.flcontent, Tab4) 
         .commit(); 

       break; 



     } 
    } catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

} 

Im onCreate Methode von Tabs, mache ich einen Aufruf an den Server, eine Liste zu holen. Verschiedene Registerkarten haben unterschiedliche Anforderungen.

Wenn ich auf Taste 2, Tab2 Lasten und so weiter, bis Button4, Tab4

Zum Beispiel, wenn ich navigieren von Tab1 zu Tab2: Wenn ich Button2 klicken, wird Tab1 ersetzt durch Tab2 und eine neue Liste wird geladen . Wenn ich auf Button1 zurück klicke, Wie verhindere ich, den Server in Tab1 erneut aufzurufen?

+0

machen Sie eine statische Variable zu verfolgen, dass, wenn Sie Server aufgerufen haben, dann werden Sie es nicht erneut aufrufen –

Antwort

0

Es gibt Lifecycle-Methoden eines androiden Fragments, das jedes Mal automatisch aufgerufen wird, wenn unsere Fragmente durch andere Fragmente ersetzt werden.

Verwenden Sie die entsprechenden Fragmentaktivitäts-Lebenszyklusmethoden der Fragmente, die in Ihrer App als Registerkarte fungieren. z.B. Wenn Ihre App Filme von Tabl Tab2 verwenden Sie die Methode

//Add the below method to your tab1 fragment 
@Override 
void onDetach(){ 
    // write code here that would tell the server to stop loading data 
    // you can also use onPause and onStop 
} 

Check-out-Fragment Lifecycle-Methoden auf der Android-Entwicklerdokumentation https://developer.android.com/guide/components/fragments.html#Creating

+0

Könnten Sie ein bisschen mehr erarbeiten. – Anirudh

+0

Überprüfen Sie die aktualisierte Antwort und gehen Sie zum besseren Verständnis durch die Dokumentation für Fragmente. –

0

Der beste Weg für mich ist eine Singleton-Klasse zu erstellen, die alle enthalten die Daten, die vom Server für alle Registerkarten zurückgegeben werden.

Wenn Sie zeigen, sagen wir Tab1, sollten Sie prüfen, ob es Informationen für diese Registerkarte in der Singleton-Klasse gibt. Wenn etwas vorhanden ist, senden Sie keinen Anruf an den Server.

Sie können das auch tun, indem Sie einen statischen Datencontainer (Liste, Hash-Karte usw.) für die Informationen vom Server in jeder Ihrer Klassen, die eine bestimmte Registerkarte beschreiben, haben.

Ich persönlich bevorzuge den ersten Weg.

@KhizarHayat Vorschlag ist wie meine zweite Option oben beschrieben, aber nur sicherstellen, dass die Daten vom Server nicht gelöscht werden, sobald das Fragment während der Transaktionen zerstört wird.