2010-10-26 3 views
3

J'ai 2 activités nommées firstActivity.java, secondActivity.java. Lorsque je clique sur un bouton dans firstActivity, j'appelle secondActivity. Mais quand je reviens de secondActivity, basé sur le résultat, j'ai besoin d'ignorer certaines étapes de firstactivity qui sont effectuées dans sa méthode onCreate(). En revenant de secondActivity j'ai utilisé Bundle pour mettre les données que j'ai données en entrée à Intent, j'ai accédé à ces données dans onCreate() de la première activité. Mais lorsque j'ai démarré l'application d'activité plantait en affichant NullPointerException dans la ligne où j'accède aux données de la 2ème activité. la raison pour laquelle je pense que lorsque l'application est lancée pour la première fois il n'y aura pas de valeurs dans Bundle, donc je reçois nullpointer exception.so, quelqu'un peut-il m'aider à résoudre ce problème?Enregistrement de l'état entre les activités

Merci à l'avance,

+0

Si votre pile d'appels est FirstActivity -> (bouton sur l'écran) -> SecondActivity -> (bouton de retour matériel) -> FirstActivity ... alors onCreate() n'est plus appelé pour FirstActivity. – Vuk

+0

Vuk, vous déclarez une mauvaise hypothèse. Alors que le FirstActivity est en arrière-plan, il peut être OU peut ne pas être détruit par le système d'exploitation (cela dépend de l'état actuel de la RAM). –

+1

Oui Arhimed, je suis d'accord. Bien que je voudrais personnellement ajouter tout le code que 'Android_programmer_camera' voulait être exécuté plusieurs fois dans ... mmm ... disons onResume() ou onRestoreInstance() ou quelque chose. Mon point étant qu'il ne peut pas compter sur une condition de faible RAM chaque fois qu'il commute entre Activités et onCreate() étant appelé à chaque fois. Mais vous avez raison, j'étais un peu explicite à propos de onCreate() ne jamais être multi-appelé, cela peut arriver. Bravo :) – Vuk

Répondre

8

Vous devez mettre en œuvre le onSaveInstanceState (Bundle savedInstanceState) et enregistrer les valeurs que vous souhaitez enregistrer dans un Bundle. Mettre en œuvre onRestoreInstanceState (Bundle savedInstanceState) pour récupérer le Bundle et définir à nouveau les données:

public class MyActivity extends Activity { 
    /** The boolean I'll save in a bundle when a state change happens */ 
    private boolean mMyBoolean; 

    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState) { 
     savedInstanceState.putBoolean("MyBoolean", mMyBoolean); 
     // ... save more data 
     super.onSaveInstanceState(savedInstanceState); 
    } 

    @Override 
    public void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 
     mMyBoolean = savedInstanceState.getBoolean("MyBoolean"); 
     // ... recover more data 
    } 
} 

Vous trouverez ici la documentation d'utilisation sur la manipulation de l'État: http://developer.android.com/reference/android/app/Activity.html

rechercher uniquement des méthodes Thos dans les docs: P

+0

comment accéder à ces données dans la méthode onCreate()? –

+0

C'est l'argument qui a été fourni par onCreate(): public void onCreate (Bundle savedInstanceState) – Moss

+0

comment accéder à myBoolean dans onCreate() car il est variable locale.Si nous le faisons variable globale son résultat ne sera pas la valeur être le même que dans la méthode OnRestoreInstanceState() –

Questions connexes