Also habe ich ein Fragment, das an eine Aktivität angehängt ist, und ich versuche sicherzustellen, dass die Dinge reibungslos laufen, wenn der Bildschirm gedreht wird (oder irgendetwas, das die Aktivität unterbrechen würde)). Um dies zu tun, verwende ich die Methoden onSaveInstanceState und onRestoreInstanceState in meiner Aktivität, um die Informationen zu speichern, die meine Aktivität speichert.onCreateView() für Fragment, das vor Aktivität aufgerufen wird onRestoreInstanceState()
Wenn die Ansicht für mein Fragment erzeugt wird, fragt das Fragment, das die Aktivität zur Information (Diese ist in onCreateView() für das Fragment):
ArrayList<String> picList = mListener.getPics();
ArrayList<String> descripList = mListener.getDescriptions();
für das Fragment Um es, die Ansicht zu erstellen benötigt Zugriff auf picList und descripList, die Mitgliedsvariablen für die Aktivität sind. Diese Membervariablen werden in onSaveInstanceState und onRestoreInstanceState gespeichert und wiederhergestellt.
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if(photoFile != null)
outState.putString("photoFile", photoFile.getAbsolutePath());
outState.putString("currentFragTag", currentFragTag);
outState.putStringArrayList("picList", picList);
outState.putStringArrayList("descripList", descripList);
}
@Override
protected void onRestoreInstanceState(Bundle saved) {
super.onRestoreInstanceState(saved);
if(saved.getString("photoFile") != null)
photoFile = new File(saved.getString("photoFile"));
currentFragTag = saved.getString("currentFragTag");
picList = saved.getStringArrayList("picList");
descripList = saved.getStringArrayList("descripList");
currentFrag = getFragmentManager().findFragmentByTag(currentFragTag);
changeFrag(currentFrag, currentFragTag);
}
Das Problem ist, onCreateView() vor onRestoreInstanceState aufgerufen wird() in der Aktivität wird, genannt. Ich habe versucht, stattdessen onActivityCreated() im Fragment zu verwenden, aber das wurde auch zuvor onRestoreInstanceState() aufgerufen. Mit einem angehängten Debugger wird onRestoreInstanceState() beim Drehen des Bildschirms immer zuletzt aufgerufen. Dies bedeutet, dass das Fragment beim Erstellen der Ansicht keinen Zugriff auf die Informationen der Aktivität hat.
Soll das passieren? Wie kann ich in der Ansicht meines Fragments Informationen aus der Aktivität verwenden, wenn die Aktivität wiederhergestellt wird?
Haben Sie das Fragment auf 'setRetainInstance (true)' gesetzt? –
Ich habe nicht. Was würde das zur Folge haben? Ich habe eine schnelle Suche durchgeführt und festgestellt, dass ich sie nicht für Fragmente auf dem Backstack verwenden kann, was problematisch wäre. – TLF
Sie müssen diese Methode einfach auf die Fragment-Instanz aufrufen, wenn Sie sie erstellen. Ich bin mir nicht ganz sicher, was es tut, aber es ist eine Möglichkeit, den Zustand eines Fragments beizubehalten. Vielleicht könntest du dich hier beziehen? http://stackoverflow.com/questions/15313598/once-for-all-how-to-correctly-save-instance-state-of-fragments-in-backstack –