2017-01-06 5 views
2

Kann jemand bitte erklären, warum der Wert in meinem savedInstanceState null ist? Ich habe 3 Widgets, einen EditText, Button und TextView. Die Person tippt ein, was sie will. Die Phrase erscheint in der Textansicht. Ich möchte die Eingabe beibehalten, wenn ich das Telefon umlege. Ich versuchte, den Sparzustand aber wenn die Aktivität neu erstellt wird, mein Toast sagt, dass es null ist:savedInstanceState gibt null zurück

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); 
}} 
+0

Was meinst du genau mit "Aktivität neu erstellt", wie und wann es neu erstellt wird –

+0

Wenn das Gerät gedreht wird –

Antwort

3

Sie benötigen onSaveInstanceState(Bundle outState) diese Funktion zu nutzen, das eine ohne PersistableBundle outPersistentState

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

void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState) dies wird nur erhalten aufgerufen, wenn Sie Attribut persistableMode innen manifestieren

in der Aktivitäts-Tag angegeben

Sie mehr lesen können about it here

1

Sie können eine String Variable definieren, die für Ihre Aktivität global ist und sie bei der Wiederherstellung vonInstanceState definieren.
Sieht ein wenig etwas wie folgt aus:

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); 
1

Verwenden Sie den folgenden Code, um es für mich funktioniert.

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