【问题标题】:Restore changed menu state after rotation of a device旋转设备后恢复更改的菜单状态
【发布时间】:2013-04-13 20:32:12
【问题描述】:

我正在编写一个应用程序,它有一个带有按钮和图像的菜单。我按下按钮,按钮的标签从“录制曲目”变为“停止录制”。问题是当我旋转我的设备时,带有按钮的活动被操作系统杀死。所以,我明白我必须在我的数据被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");

} 

虽然它完美地恢复了我的图像,但我仍然遇到菜单问题:由于某种原因,它始终保持“null”,因此它永远不会更改我的按钮标签,尽管它应该在每次 Activity 启动时重新创建我将它保存在我的 Activity 的私有对象中:

@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 你是对的,这是一个错误:-/

标签: android menuitem screen-rotation


【解决方案1】:

您应该将您的 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);
    }
}

因为这个方法是在菜单显示给用户之前直接调用的。

【讨论】:

  • 你应该使用menu.findItem(R.id.track);而不是menu.getItem(R.id.track);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 2015-12-20
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多