我正在编写一个应用程序,它有一个带按钮和图像的菜单。我按下按钮并且按钮的标签从“记录轨道”变为“停止记录”。问题是当我旋转我的设备时,带按钮的活动被操作系统杀死。所以,我明白我必须在我的数据在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你是对的,这是一个错误: -/ –