J'ai la situation suivante:
OnAUSAUSE CODE>, OnsaveInstancestate CODE> et OnStop code> Méthodes. Li>
- sur l'activité B i Appuyez sur la touche "UP" sur la barre d'action li>
- Activité Une première est détruite (appels
Ondestroy code>) puis recréé. (Cela semble juste arriver de cette façon. Je n'ai pas mis en œuvre de cette façon, semble être la façon Android de faire les choses.) Li>
- pendant la méthode
Oncreate code>, la variable sauvegardestansetate code> est toujours null. li>
ul> Je sais qu'il y a eu des sujets similaires ici, mais aucun d'entre eux ne semble avoir une réponse pour ma situation. Toutes les méthodes de rappel ont des lignes de journalisation. Donc, je suis certain que la méthode de sauvegarde est exécutée et Destory est exécutée. Mais pourquoi n'y a-t-il jamais un objet sauvedInstansetate code> objet? P> Ma méthode de sauvegarde: p> xxx pré> y a-t-il d'autre code dont vous avez besoin de moi inclure? p> p>
5 Réponses :
Appuyez sur Si vous voulez qu'ils se comportent de la même manière, vous pouvez utiliser ce code dans l'activité B: p> up code> sur la barre d'action n'est en réalité pas la même chose que lorsque vous appuyez sur le bouton Back code>.
Je vais bien avec la façon dont le bouton fonctionne. Je ne veux tout simplement pas perdre l'état d'activité ..
Ce que je veux dire, c'est que vous appuyiez sur Android de restaurer votre activité. Cela crée une nouvelle. Donnez au code que j'ai posté un essai et voyez s'il fonctionne.
Ainsi, l'utilisation de la fonction intégrée recrée toujours? Peut-être que ce n'est pas complètement ce que je voulais. Votre code fonctionne. Je vais l'utiliser pour l'instant puisqu'il me fait économiser la peine d'essayer d'économiser mon état d'activité. Merci
Oui c'est assez gênant. J'utilise ce code à peu près tout le temps maintenant.
Vous devez mettre le
super.onSaveInstanceState(savedInstanceState);
Cela donne le même résultat.
Comme mentionné dans la documentation : p>
void protégé sur ~SaveInstansetate (bundledstate): strong> p>
Ne confondez pas cette méthode avec des rappels de cycle de vie d'activité telles que l'onpaause (), qui est toujours appelé lorsqu'une activité est mise en arrière-plan ou sur son chemin vers la destruction, ou sur l'Ontetop () qui est appelée avant la destruction. Un exemple de lorsque l'onpaause () et OnStop () est appelé et non cette méthode est lorsque un utilisateur navigue de l'activité B à l'activité A: Il n'est pas nécessaire d'appeler OnSaveInstanCestate (Bundle) sur B parce que cette instance particulière ne sera jamais restaurée , donc le système évite l'appelant. Un exemple lorsque l'onpaause () est appelé et non OnsaveInstanCestate (Bundle) est lorsque l'activité B est lancée devant l'activité A: Le système peut éviter d'appeler OnsaveInstanCetate (paquet) sur l'activité A si elle n'est pas tuée pendant toute la durée de vie. de B puisque l'état de l'interface utilisateur d'A restera intact. strong> p> blockQuote>
Si vous faites un changement d'orientation avec votre appareil OnStop () et OnsaveDInstanCestate (...) seront appelés. P>
Je connais la documentation. C'est pourquoi je mets les lignes de journalisation là-bas. Et je suis certain que l'onSavedInstancestate est appelée. Si vous utilisez l'onpause () serait toujours une meilleure solution, pourriez-vous alors donner un exemple de comment je peux sauver l'état? Comme il n'y a pas d'objet de paquet ..
Peut-être que OnrestoreInstanCetate (Bundle SavedInstanCetate) sera appelé? Si vous avez des états mondiaux, vous pouvez utiliser SharedPreferences.
L'activité supérieure est recréée lors de la navigation. Pour préserver l'état de l'activité A, vous pouvez
a) Définir le mode de lancement de l'activité A à "singletop" (Ajouter ou p> b) Ajouter Android: LaunleMode = "SingleTop" code> à AndroidManifed.xml) P> flag_activity_clear_top code> Drapeau sur l'intention code> code> Lorsque vous naviguez à partir de l'activité B: P> @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent up = NavUtils.getParentActivityIntent(this);
up.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, up);
return true;
}
return super.onOptionsItemSelected(item);
}
C'est la réponse que j'ai recherchée pendant des heures!
je devais ajouter
Android: LaunchMode = "SingleTop" Code>
dans la section d'activité de mon fichier manifeste pour que cela fonctionne. Je n'ai alors besoin que p>
navutils.navigatefromaMaTask (getactivité ()) code> p>