Moja aplikacja na Androida ma ActionBar
, która zmienia, który Fragment
zajmuje określony numer FrameLayout
. Próbuję użyć onSaveInstanceState
, aby zapisać stan fragmentu po zmianie karty, aby można go było odzyskać w onCreateView
.Odłączanie fragmentu bez wyzwalania onSaveInstanceState()
Problem polega na tym, że onSaveInstanceState
nigdy nie jest wywoływany. Wywoływane są metody Fragment
, ale Bundle
dostarczone do onCreateView
pozostaje puste.
Czy ktoś może mi wytłumaczyć, kiedy rzeczywiście nazywa się onSaveInstanceState
, w jaki sposób mogę upewnić się, że zostanie wywołany podczas przełączania kart lub najlepszą praktyką do zapisywania i przywracania stanu Fragment
po odłączeniu i ponownym podłączeniu?
Fragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.event_log, container, false);
// Retrieve saved state
if (savedInstanceState != null){
System.out.println("log retrieved");
} else {
System.out.println("log null");
}
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
System.out.println("log saved");
super.onSaveInstanceState(outState);
// more code
}
aktywny:
/**
* Detach the current Fragment, because another one is being attached.
*/
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (tab.getText().equals(getString(R.string.tab_events))){
if (frEventLog != null) {
ft.detach(frEventLog);
}
}
Możliwa kopię http://stackoverflow.com/questions/8503629/fragments-onsaveinstancestate-never-called – DeeV
co jest frEventLog? –