2017-01-06 38 views
2

有人可以請解釋爲什麼我的savedInstanceState中的值爲null? 我有3個小部件,一個EditText,Button和TextView。該人輸入他們想要的東西。短語在TextView中彈出。我想在翻開手機時保持輸入。我試圖保存狀態,但是當活動被重建,我的麪包說,這是空: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

您需要使用此功能onSaveInstanceState(Bundle outState),在一個沒有PersistableBundle outPersistentState

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

void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState)這樣只會得到當您在清單中的活動標記中指定屬性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); 
    }