Fragment de l' onSaveInstanceState(Bundle outState)
ne sera jamais appelée à moins que fragment de l'activité de l'appeler sur lui-même et attaché fragments. Ainsi, cette méthode ne sera pas appelé jusqu'à ce que quelque chose (généralement de rotation) de la force de l'activité SaveInstanceState
et le restaurer plus tard.
Mais si vous avez une seule activité et grand ensemble de fragments à l'intérieur (avec une utilisation intensive de l' replace
) et l'application ne fonctionne que dans une seule orientation de l'activité de l' onSaveInstanceState(Bundle outState)
ne peut pas être appelé pour un long moment.
Je sais que trois solutions possibles.
La première:
l'utilisation du fragment arguments pour contenir les données importantes:
public class FragmentA extends Fragment {
private static final String PERSISTENT_VARIABLE_BUNDLE_KEY = "persistentVariable";
private EditText persistentVariableEdit;
public FragmentA() {
setArguments(new Bundle());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_a, null);
persistentVariableEdit = (EditText) view.findViewById(R.id.editText);
TextView proofTextView = (TextView) view.findViewById(R.id.textView);
Bundle mySavedInstanceState = getArguments();
String persistentVariable = mySavedInstanceState.getString(PERSISTENT_VARIABLE_BUNDLE_KEY);
proofTextView.setText(persistentVariable);
view.findViewById(R.id.btnPushFragmentB).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager()
.beginTransaction()
.replace(R.id.frameLayout, new FragmentB())
.addToBackStack(null)
.commit();
}
});
return view;
}
@Override
public void onPause() {
super.onPause();
String persistentVariable = persistentVariableEdit.getText().toString();
getArguments().putString(PERSISTENT_VARIABLE_BUNDLE_KEY, persistentVariable);
}
}
- La seconde, mais moins pédantesque -
maintenez les variables dans les singletons
Le troisième ne l'a pas) replace()
des fragments, mais add()
/show()
/hide()
.