我正在使用ActionBarSherlock,以及我动态管理的几个MenuItem
,具体取决于程序状态。具体来说,我将MenuItem
保存到Activity
的{{1}}方法中的实例变量中,然后可以在onCreateOptionsMenu()
中稍后根据需要显示和/或隐藏它们。
但是,我发现Activity
变量可能会在配置更改时丢失,例如设备轮换。因此,如果需要,我还会将它们放入MenuItem
并将其传递给Parcel
,以便通过下一个onSaveInstanceState()
调用中的savedInstanceState
机制进行恢复。
在设备轮换的情况下,这似乎工作正常。但是,如果我按下主页按钮,则会出现错误:
onCreate()
知道有什么区别,或建议如何解决?谢谢!
更新
我使用onRetainCustomNonConfigurationInstance()
找到了一个简单的解决方案。通过重写此方法,您可以在销毁Unable to marshal value com.actionbarsherlock.internal.view.menu.MenuItemWrapper
时隐藏所选类的对象,然后使用Activity
检索它。这似乎比弄乱getLastCustomNonConfigurationInstance()
等更简单,并且它适用于我的情况。
但我仍然想知道:为什么我使用Parcelable
会收到上述错误?使用onSaveInstanceState()
一般是安全的,还是有任何陷阱?