2016-03-31 2 views
0

Ich habe kürzlich ein neues Muster zum Speichern des Fragmentstatus durch ein beibehaltenes Fragment entwickelt. Statt Dinge in onSaveInstanceState als solche Sparend:Gibt es einen Nachteil, diesen Zustand mit einem Fragment zu erhalten?

public class MyActivityOrFragment { 
    public void onSaveInstanceState(Bundle bundle) { 
    bundle.putInt("example", 123); 
    } 

    // plus restore in onCreate 
} 

Ich halte einen Zustand Fragment wie folgt aus:

public class MyActivityOrFragment { 
    public static class State extends Fragment { 
    int example = 123; 
    public void onCreate(...) { 
      ... 
      setRetainInstance(true); 
    } 
    } 
    State state; 

    public void onCreate(Bundle ssi) { 
    if (ssi == null) { 
     state = new State(); 
     getFragmentManager().beginTransaction().add(state, "state").commit(); 
    } else { 
     state = (State) getFragmentManager().findByTag("state"); 
    } 
    } 
} 

Mit viel Zustand zu halten, dies so viel vorformulierten verringert, weil ich es einfach halten kann das Zustandsfragment und weiß, dass es automatisch beibehalten wird. Gibt es jedoch einen Nachteil bei der Verwendung des beibehaltenen Fragments, anstatt es wie üblich im Paket zu speichern? Ist das zu schön, um wahr zu sein?

+0

Überprüfen Sie dies: https://github.com/frankiesardo/icepick – Teodor

Antwort

0

Pro Android-Dokumentation.

Mit setRetainInstance() können Sie Ihr Fragment beibehalten, während die Anwendung ausgeführt wird.

Legen Sie fest, ob eine Fragmentinstanz in der Aktivität Neuerstellung beibehalten wird (z. B. von einer Konfigurationsänderung).

http://developer.android.com/reference/android/app/Fragment.html

Aber es es nicht behalten, wenn Sie Ihre Aktivität zerstört wird. Dafür stehen onSaveInstanceState und onRestoreInstanceState.

Wie Ihre Aktivität beginnt zu stoppen, kann das System ruft onSaveInstanceState() so Ihre Aktivität Zustandsinformationen mit eine Auflistung von Schlüssel-Wert-Paare speichern.

Wenn Ihre Aktivität neu erstellt wird, nachdem es zuvor zerstört wurde, Sie können Ihren gespeicherten Zustand aus dem Bundle, dass das System übergibt Ihre Aktivität erholen. Die Rückrufmethoden onCreate() und onRestoreInstanceState() erhalten das gleiche Bundle, das die Instanz Statusinformationen enthält.

http://developer.android.com/training/basics/activity-lifecycle/recreating.html

0

Es schlecht Verwendung Fragment ist dann onSaveInstanceState(), becouse Ansatz mit Fragmente mehr Speicher verbrauchen.

Verwandte Themen