android - 旋转设备后恢复更改的菜单状态

标签 android menuitem screen-rotation

我正在编写一个应用程序,它有一个带有按钮和图像的菜单。我按下按钮,按钮的标签从“录制轨道”变为“停止录制”。问题是当我旋转我的设备时,带有按钮的 Activity 被操作系统终止。所以,我知道我必须在数据在 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 的私有(private)对象中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    new MenuInflater(this).inflate(R.menu.actions, menu);
    this.menu = menu;
    return (super.onCreateOptionsMenu(menu));
}

知道我做错了什么吗?谢谢。

最佳答案

您应该将menu != null block 移动到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);
    }
}

因为在向用户显示菜单之前直接调用此方法。

关于android - 旋转设备后恢复更改的菜单状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15992598/

相关文章:

android - 在 parcel 中读写 ArrayList<Object> 和各种类型的对象

WPF 上下文菜单设计。如何在WPF菜单项中设置背景?

android - POPUPMENU 图标未在已发布的 apk 版本中显示

Android:保存旋转变量和设置

delphi - 如何防止平板电脑屏幕自动旋转?

java - 对象的 Firestore 更新列表

android - 尝试编译 android 内核代码时出错?

javascript - 为什么在Android中旋转屏幕时setIntervals不能被杀死?

java - 在 Android 10 上保存视频并将其插入图库

java - Struts 菜单中的 I18n 与 Struts 2