2017-01-06 9 views
2

誰かが私のsavedInstanceStateの値がnullである理由を説明できますか? 私は3つのウィジェット、EditText、Button、TextViewを持っています。人は彼らが望むものをタイプする。フレーズがTextViewでポップアップ表示されます。私は電話をかけるときに入力を保持したい。活動が再作成されたとき、私は、私のトーストは、それがnullだと言って、状態を保存しようとしましたが:savedInstanceState nullを返す

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

「アクティビティを再作成した」とはどういう意味ですか?どのように再作成されるのですか? –

+0

デバイスが回転しているとき –

答えて

3

あなたはこれが唯一のでしょうPersistableBundle outPersistentState

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

void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState)せずにこの機能onSaveInstanceState(Bundle outState)、いずれかを使用する必要がありますあなたはあなたが読むことができる属性persistableModeマニフェスト

内のアクティビティタグで指定されていたときに呼び出されるよりabout it here

1

アクティビティにグローバルな変数Stringを定義し、restoringInstanceStateで定義することができます。それは私のために動作するコード以下

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

用途:
は、このような小さなものになります。

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putString("example",newString); 
    } 
関連する問題