2017-06-11 2 views
3

Ich habe 4 Schaltfläche, um Fragment in Aktivität [Fragment A, Fragment B, Fragment C, Fragment D] zu ersetzen und dann ersetzen ich Fragment A zu Aktivität und ich ändern Wert in Fragment A nach dem ich ersetzen Fragment B zu Fragment A und Fragment C zu Fragment B ersetzen. Aber ich möchte Fragment A zu Fragment C ersetzen. Wie Zustand in Fragmente A.So speichern Sie den Status in Fragment

-Code zu speichern, wenn ich Fragment

private void beginFragmentTransaction(BaseFragment fragment) { 
    String tag = fragment.getClass().getName(); 
    currentFragmentTag = tag; 

    boolean fragmentPopped = getChildFragmentManager().popBackStackImmediate(tag, 0); 

    if (!fragmentPopped) { 
     getChildFragmentManager().beginTransaction() 
       .replace(R.id.container, fragment, tag) 
       .addToBackStack(tag) 
       .commit(); 
    } 

} 

Diagramm begehen

Fragment A -------> Fragment B

Fragment ersetzen B -------> Fragment C

Fragment C -------> Fragment A

PS. Ich möchte die Back-Taste nicht verwenden, um zu Fragment A zurückzukehren, ich möchte Fragment A ersetzen und Daten im ersten Commit wiederherstellen.

+1

Um das Fragment Zustand Sie onSaveInstanceState() implementieren müssen zu speichern: „Auch wie eine Aktivität können Sie den Zustand behalten ein Fragment, das ein Bundle verwendet, falls der Prozess der Aktivität beendet wird und Sie den Fragmentstatus wiederherstellen müssen, wenn die Aktivität neu erstellt wird. Sie können den Status während des onSaveInstanceState() - Callback des Fragments speichern und entweder onCreate(), onCreateView () oder onActivityCreated(). –

+0

Ich versuche onSaveInstanceState() zu verwenden, es ist nicht Aufruf dieser Funktion und ich überprüfe Bundle in onActivityC reated() Wenn ich dieses Fragment erneut ersetze, ist das Bündel null. @SudheeshR –

+0

teilen Sie Ihren Code, wo Sie Bundle verwenden. –

Antwort

3

Anstatt den Status während onCreate() wiederherzustellen, können Sie onRestoreInstanceState() implementieren, die das System nach der onStart() Methode aufruft. Das System ruft onRestoreInstanceState() nur auf, wenn ein gespeicherter Status wiederhergestellt wird. Sie müssen also nicht überprüfen, ob Bundle null ist.

FYI: Dies ist ein Beispielcode. Nur dass du weist.

public class MainFragment extends Fragment { 
private String title; 
private double rating; 
private int year; 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
super.onSaveInstanceState(savedInstanceState); 

savedInstanceState.putString(TITLE, "Gladiator"); 
savedInstanceState.putDouble(RATING, 8.5); 
savedInstanceState.putInt(YEAR, 2000); 
} 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
super.onActivityCreated(savedInstanceState); 

title = savedInstanceState.getString(TITLE); 
rating = savedInstanceState.getDouble(RATING); 
year = savedInstanceState.getInt(YEAR); 
} 
} 

FYI: Das ist wirklich ein guter Thread Check dies auch Once for all, how to correctly save instance state of Fragments in back stack?

Verwandte Themen