我正在編寫一個應用程序,它有一個帶按鈕和圖像的菜單。我按下按鈕並且按鈕的標籤從「記錄軌道」變爲「停止記錄」。問題是當我旋轉我的設備時,帶按鈕的活動被操作系統殺死。所以,我明白我必須在我的數據在onSaveInstanceState
方法死亡之前保存我的數據,然後在我的onCreate
方法中恢復它。事情是這樣的:設備旋轉後恢復已更改的菜單狀態
@Override
public void onSaveInstanceState(final Bundle saveInstanceState) {
saveInstanceState.putSerializable("image", image);
saveInstanceState.putSerializable("buttonState", isRecording);
}
和:
if (savedInstanceState != null) {
isRecording = savedInstanceState.getBoolean("buttonState");
if (menu != null) {
MenuItem recordButton = menu.getItem(R.id.track);
if (!isRecording) {
recordButton.setTitle(R.string.rec_track_label);
} else {
recordButton.setTitle(R.string.stop_rec_track_label);
}
}
Image = (Image)savedInstanceState.getSerializable("image");
}
雖然它完全恢復我的形象,我還是有問題的菜單:由於某種原因,它始終保持「零」,所以它永遠不會盡管它應該每次都重新創建我的按鈕更改標籤,當活動開始,我把它保存在我的活動的私有對象:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(this).inflate(R.menu.actions, menu);
this.menu = menu;
return (super.onCreateOptionsMenu(menu));
}
任何想法,我究竟做錯了什麼?謝謝。
只是好奇:你的'if(isRecording)'陳述似乎是顛倒的;你爲什麼要設置'stop_rec_track_label'文本,如果它不錄製? – eightx2
@ eightx2你是對的,這是一個錯誤: -/ –