Je suis confus quand il s'agit de sauver un état. Je sais donc que cela onSaveInstanceState(Bundle)
s'appelle lorsque l'activité est sur le point d'être détruite. Mais comment y stocker vos informations et les ramener à leur état d'origine onCreate(Bundle savedInstanceState)
? Je ne comprends pas comment cet ensemble restaurera les informations. Il serait utile que quelqu'un puisse donner un exemple. Le guide des développeurs ne fait pas un bon travail pour expliquer cela.
public class Conversation extends Activity {
private ProgressDialog progDialog;
int typeBar;
TextView text1;
EditText edit;
Button respond;
private String name;
private String textAtView;
private String savedName;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dorothydialog);
text1 = (TextView)findViewById(R.id.dialog);
edit = (EditText)findViewById(R.id.repsond);
respond = (Button)findViewById(R.id.button01);
if(savedInstanceState != null){
savedInstanceState.get(savedName);
text1.setText(savedName);
}
else{
text1.setText("Hello! What is your name?");
respond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
name = edit.getText().toString();
text1.setText("Nice to meet you "+ name);
}
});
}
}
@Override
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putString(savedName, name);
}
}
Réponses:
Le
Bundle
est un conteneur pour toutes les informations que vous souhaitez enregistrer. Vous utilisez les fonctions put * pour y insérer des données. Voici une courte liste (il y en a plus) des fonctions put que vous pouvez utiliser pour stocker des données dans leBundle
.Dans votre
onCreate
fonction, celaBundle
est rendu au programme. La meilleure façon de vérifier si l'application est en cours de rechargement ou de démarrage pour la première fois est:Pour récupérer les données, utilisez les fonctions get * comme les fonctions put *. Les données sont stockées sous forme de paire nom-valeur. C'est comme un hashmap. Vous fournissez une clé et la valeur, puis lorsque vous souhaitez récupérer la valeur, vous donnez la clé et la fonction obtient la valeur. Voici un petit exemple.
Votre message enregistré sera grillé à l'écran. J'espère que cela t'aides.
la source
Une remarque majeure que tous les nouveaux développeurs Android doivent savoir est que toutes les informations contenues dans les widgets (TextView, boutons, etc.) seront conservées automatiquement par Android tant que vous leur attribuez un identifiant. Cela signifie que la plupart de l'état de l'interface utilisateur est pris en charge sans problème. Ce n'est que lorsque vous avez besoin de stocker d'autres données que cela devient un problème.
Depuis Android Docs :
la source
Une bonne information: vous n'avez pas besoin de vérifier si l'objet Bundle est nul dans la méthode onCreate (). Utilisez la méthode onRestoreInstanceState (), que le système appelle après la méthode onStart (). Le système appelle onRestoreInstanceState () uniquement s'il y a un état enregistré à restaurer, vous n'avez donc pas besoin de vérifier si le Bundle est nul
la source
Informations sur le magasin:
Si vous ne souhaitez pas restaurer les informations dans votre méthode onCreate:
Voici les exemples: Recréer une activité
la source
Fondamentalement, onSaveInstanceState (Bundle outBundle) vous donnera un bundle. Lorsque vous regardez la classe Bundle, vous verrez que vous pouvez y mettre beaucoup de choses différentes. Lors du prochain appel de onCreate (), vous récupérez simplement ce Bundle en tant qu'argument. Ensuite, vous pouvez relire vos valeurs et restaurer votre activité.
Disons que vous avez une activité avec un EditText. L'utilisateur a écrit du texte à l'intérieur. Après cela, le système appelle votre onSaveInstanceState (). Vous lisez le texte du EditText et l'écrivez dans le Bundle via Bundle.putString ("edit_text_value", theValue).
Maintenant onCreate est appelé. Vous vérifiez si le bundle fourni n'est pas nul. Si tel est le cas, vous pouvez restaurer votre valeur via Bundle.getString ("edit_text_value") et la remettre dans votre EditText.
la source
Ceci est pour des informations supplémentaires.
Imaginez ce scénario
ActivityB lance une nouvelle ActivityAPrime by
ActivityAPrime n'a aucune relation avec ActivityA.
Dans ce cas, le Bundle dans ActivityAPrime.onCreate () sera nul.
Si ActivityA et ActivityAPrime doivent être la même activité au lieu d'activités différentes, ActivityB doit appeler finish () plutôt que startActivity ().
la source
Si les données ne sont pas chargées depuis,
savedInstanceState
utilisez le code suivant.Le problème est que l'appel d'URL ne se termine pas complètement, alors vérifiez si les données sont chargées, puis affichez la valeur instanceState.
la source