3

我正在使用 ActionBarSherlock 以及MenuItem我动态管理的几个 s,具体取决于程序状态。具体来说,我将s 保存到'方法MenuItem中的实例变量中,然后可以根据需要在.ActivityonCreateOptionsMenu()Activity

但是,我发现MenuItem变量可能会在配置更改时丢失,例如设备旋转。因此,如果需要,我还将它们放入 aParcel并通过下一次调用中的机制将它们传递给onSaveInstanceState()进行恢复。savedInstanceStateonCreate()

在设备旋转的情况下,这似乎工作正常。但是,如果我按下主页按钮,我会收到错误消息:

Unable to marshal value com.actionbarsherlock.internal.view.menu.MenuItemWrapper

知道有什么区别,或者建议如何解决?谢谢!

更新

我找到了一个简单的解决方案,使用onRetainCustomNonConfigurationInstance(). 通过覆盖此方法,您可以在销毁 an 时存储您选择的类的对象Activity,然后使用getLastCustomNonConfigurationInstance(). 这似乎比弄乱Parcelables 等要简单得多,而且它适用于我的情况。

但我仍然想知道:为什么我会使用 得到上述错误onSaveInstanceState()?使用起来一般安全onRetainCustomNonConfigurationInstance()吗,还是有什么陷阱?

4

0 回答 0