2 votes

savedInstanceState retournant null

Quelqu'un peut-il m'expliquer pourquoi la valeur de mon savedInstanceState est nulle ? J'ai 3 widgets, un EditText, un bouton et un TextView. La personne tape ce qu'elle veut. La phrase s'affiche dans le TextView. Je veux conserver l'entrée lorsque je retourne le téléphone. J'ai essayé de sauvegarder l'état mais lorsque l'activité est recréée, mon Toast indique qu'il est nul :

public class MainActivity extends AppCompatActivity {
private EditText input;
private TextView output;
private Button button;
private String newString = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    input = (EditText)findViewById(R.id.input);
    output = (TextView) findViewById(R.id.output);
    button = (Button)findViewById(R.id.button);

    if (savedInstanceState!=null){
        Toast.makeText(this, "SAVED IS " + savedInstanceState.getString("example"), Toast.LENGTH_SHORT).show();
    }

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            newString = input.getText().toString();
            output.setText(newString);
        }
    });

}

@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
    super.onSaveInstanceState(outState, outPersistentState);
    outState.putString("example",newString);
}}

3voto

Pavneet_Singh Points 25397

Vous devez utiliser cette fonction onSaveInstanceState(Bundle outState) celui qui ne l'est pas PersistableBundle outPersistentState

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState, outPersistentState);
    outState.putString("example",newString);
}

void onSaveInstanceStat PersistableBundle outPersistentState) ceci ne sera appelé que si vous avez l'attribut persistableMode spécifié dans la balise d'activité à l'intérieur du manifeste

Vous pouvez lire la suite à ce sujet ici

1voto

Montassir Ld Points 309

Vous pouvez définir un String qui est globale à votre activité et la définir lors de la restauration de l'état d'instance.
Ça ressemble un peu à ça :

String userInput;
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    userInput = savedInstanceState.getString("example") // Refers to your "outState.putString "example" <-- key
    output.setText(newString);

1voto

Maya Mohite Points 320

Utilisez le code ci-dessous, il fonctionne pour moi.

 @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("example",newString);
    }

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