J'ai un petit bug amusant dans mon application. Lorsque l'utilisateur fait pivoter l'écran, je perds une partie des données de mon activité. Quelqu'un qui a une idée de pourquoi cela se produit?
Réponses
Trop de publicités?//Use onSaveInstanceState(Bundle) and onRestoreInstanceState
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save UI state changes to the savedInstanceState.
// This bundle will be passed to onCreate if the process is
// killed and restarted.
savedInstanceState.putBoolean("MyBoolean", true);
savedInstanceState.putDouble("myDouble", 1.9);
savedInstanceState.putInt("MyInt", 1);
savedInstanceState.putString("MyString", "Welcome back to Android");
// etc.
super.onSaveInstanceState(savedInstanceState);
}
//onRestoreInstanceState
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
double myDouble = savedInstanceState.getDouble("myDouble");
int myInt = savedInstanceState.getInt("MyInt");
String myString = savedInstanceState.getString("MyString");
}
C'est ainsi que vous enregistrez vos données lorsque le système les supprime lors de la rotation.
Par défaut, lorsque l'écran est tourné, votre activité est tuée et redémarrée. Pour vous assurer qu'aucune donnée n'est perdue, vous devez enregistrer et restaurer correctement vos données à l'aide des méthodes de cycle de vie. Voir Enregistrement de l'état persistant .
La solution la plus rapide que j'ai trouvée est la suivante : http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
Voici une variante de la réponse utile de @jaisonDavis :
int myInt;
String myString;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_verses);
if (savedInstanceState == null) {
Intent intent = getIntent();
myInt = intent.getIntExtra("MyIntIntentKey", DEFAULT_INT);
myString = intent.getStringExtra("MyStringIntentKey", DEFAULT_STRING);
} else { // savedInstanceState has saved values
myInt = savedInstanceState.getInt("MyIntKey");
myString = savedInstanceState.getString("MyStringKey");
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt("MyIntKey", myInt);
savedInstanceState.putString("MyStringKey", myString);
super.onSaveInstanceState(savedInstanceState);
}
Dans cet exemple, les variables sont initialisées à partir d'un Intent
la première fois que l'activité est créée, mais après cela, elles sont initialisées à partir de savedInstanceState
(comme lorsque l'orientation change).