103 votes

Comment utiliser l'exemple onSavedInstanceState s'il vous plaît

Je suis confus quand il s'agit de sauver un État. Je sais donc que onSaveInstanceState (Bundle) est appelée lorsque l'activité est sur le point d'être détruite. Mais comment stockez-vous vos informations si et les ramenez à leur état d'origine dans onCreate (Bundle savedInstanceState)? Je ne comprends pas comment cet ensemble permettra de restaurer des informations ... Il serait utile que quelqu'un donne un exemple? Le guide de développement 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);

    }
}
 

185voto

Spidy Points 10242

L' Bundle est un conteneur pour toutes les informations que vous souhaitez enregistrer. Vous utilisez le mettre* fonctions pour insérer des données dans. Voici une courte liste (il y en a) de mettre les fonctions que vous pouvez utiliser pour stocker les données dans l' Bundle.

putString
putBoolean
putByte
putChar
putFloat
putLong
putShort
putParcelable (used for objects but they must implement Parcelable)

Dans votre onCreate fonction Bundle est remis au programme. La meilleure façon de vérifier si l'application est en train d'être rechargé, ou commencé pour la première fois est:

if( savedInstanceState != null ) {
 //Then the application is being reloaded
}

Pour récupérer les données, il faut utiliser l'obtenir* fonctions comme l'* les fonctions. Les données sont stockées comme une paire nom-valeur. C'est comme une table de hachage. Vous fournir une clé et la valeur, alors la valeur de retour, de vous donner les clés et de la fonction récupère la valeur. Voici un court exemple.

@Override
public void onSaveInstanceState(Bundle outState) {
   super.onSaveInstanceState(outState);
   outState.putString("message", "This is my message to be reloaded");
}

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  if( savedInstanceState != null ) {
     Toast.makeText(this, savedInstanceState .getString("message"), Toast.LENGTH_LONG).show();
  }
}

Votre message enregistré sera grillé à l'écran. Espérons que cette aide.

33voto

Cat Man Do Points 11771

L'un des principaux noter que tous les nouveaux développeurs Android à savoir, c'est que toute l'information dans les Widgets (TextView, Boutons, etc.) sont reconduits automatiquement par Android aussi longtemps que vous attribuer un IDENTIFIANT à eux. Ce qui signifie que la plupart de l'INTERFACE utilisateur de l'état est pris en charge sans problème. Seulement lorsque vous en avez besoin pour stocker d'autres données ne deviennent un problème.

De Android Docs:

Le seul travail que vous est de fournir un IDENTIFIANT unique (avec l' android:id de l'attribut) pour chaque widget vous souhaitez enregistrer son état. Si un widget de ne pas avoir une carte d'identité, puis il ne peut pas enregistrer son état

0voto

ken Points 489

C'est pour de l'information supplémentaire.

Imaginez ce scénario

  1. ActivityA lancement ActivityB.
  2. ActivityB le lancement d'une nouvelle ActivityAPrime par

    Intent intent = new Intent(getApplicationContext(), ActivityA.class);
    startActivity(intent);
    
  3. ActivityAPrime n'a pas de relation avec ActivityA.
    Dans ce cas, le Faisceau dans ActivityAPrime.onCreate() sera nulle.

Si ActivityA et ActivityAPrime doit être la même activité en lieu et place de différentes activités, ActivityB doit appeler finition() à l'aide de startActivity().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X