Kann ich savedInstanceState()
verwenden, um den Status beim Entfernen eines Fragments zu speichern, und dann den Status wiederherstellen, wenn ich das Fragment vom Backstack lösche? Wenn ich das Fragment vom Backstack wiederherstelle, ist savedInstanceState-Bundle immer null.
Im Moment ist der Anwendungsfluss: Fragment erstellt -> Fragment entfernt (zum Backstack hinzugefügt) -> Fragment vom Backstack wiederhergestellt (SavedInstanceState-Bundle ist null).
Hier ist der relevante Code:
public void onActivityCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
Long playlistId = bundle.getLong(Constants.PLAYLIST_ID);
int playlistItemId = bundle.getInt(Constants.PLAYLISTITEM_ID);
if (savedInstanceState == null) {
selectedVideoNumber = playlistItemId;
} else {
selectedVideoNumber = savedInstanceState.getInt("SELECTED_VIDEO");
}
}
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(Constants.SELECTED_VIDEO, selectedVideoNumber);
}
Ich denke, das Problem ist, dass onSavedInstanceState()
nie aufgerufen wird, wenn es entfernt und zum Backstack hinzugefügt wird. Wenn ich onsavedInstanceState () nicht verwenden kann, gibt es eine andere Möglichkeit, dies zu beheben?
onSaveInstanceState wird bei der normalen Neuerstellung eines Fragments im Backstack (leider) nicht aufgerufen. Check out http://developer.Android.com/guide/components/fragments.html#Creating und die Antwort on Wie kann ich den Fragmentstatus beibehalten, wenn ich ihn dem Backstack hinzufüge?
Ich möchte die Ansicht, die ich in onCreateView zurückgebe, als globale Variable speichern. Wenn ich zurückgebe, überprüfe ich einfach Folgendes:
if(mBaseView != null) {
// Remove the view from the parent
((ViewGroup)mBaseView.getParent()).removeView(mBaseView);
// Return it
return mBaseView;
}
Das Problem ist, dass dem Fragment ein Id
oder Tag
zugeordnet sein muss, damit das FragmentManager
den Überblick behält.
Es gibt mindestens 3 Möglichkeiten, dies zu tun:
Deklarieren Sie im XML-Layout ein Id
für Ihr Fragment:
Android:[email protected]+id/<Id>
Wenn Ihr Fragmentcontainer View
ein Id
hat, verwenden Sie FragmentTransaction :
FragmentTransaction add (int containerViewId, Fragment fragment)
Wenn Ihr Fragment keinem View
zugeordnet ist (z. B. kopfloses Fragment), geben Sie ihm ein Tag
:
FragmentTransaction add (Fragment fragment, String tag)
FWIW, ich habe dies auch getroffen, aber in meinem Fall wurde onSaveInstanceState ordnungsgemäß aufgerufen und ich habe meine Statusdaten eingegeben, als ein neues Aktivitätsfragment auf dem Smartphone aufgerufen wurde. Wie Sie wurde auch onActivityCreated mit dem Status savedInstanceState immer als null bezeichnet. IMHO, ich denke es ist ein Bug.
Ich habe es umgangen, indem ich einen statischen MyApplication-Status erstellt und die Daten dort für das Äquivalent von "globalen Variablen" abgelegt habe ...