我正在编写一个应用程序,它有一个带按钮和图像的菜单。我按下按钮,按钮标签从“录制曲目”变为“停止录制”。问题是当我旋转设备时,带按钮的活动被操作系统杀死。所以,我知道我必须在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");
}
虽然它完全恢复了我的图像,但我仍然遇到菜单问题:由于某种原因它总是保持“空”,所以它永远不会改变我的按钮的标签,尽管它应该每次都重新创建,当Activity开始时并将其保存在我的Activity的私有对象中:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(this).inflate(R.menu.actions, menu);
this.menu = menu;
return (super.onCreateOptionsMenu(menu));
}
任何想法我做错了什么?感谢。
答案 0 :(得分:3)
您应该将menu != null
块移至onPrepareOptionsMenu:
public boolean onPrepareOptionsMenu(Menu menu)
{
MenuItem recordButton = menu.findItem(R.id.track);
if (isRecording) {
recordButton.setTitle(R.string.rec_track_label);
} else {
recordButton.setTitle(R.string.stop_rec_track_label);
}
}
在向用户显示菜单之前直接调用此方法。