我正在使用ActionBarSherlock,当用户执行某些操作时,需要更改操作栏上的某些图标。为此,我必须保存操作栏以供以后使用:
private Menu actionBarMenu;
...
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.map_activity_menu, menu);
actionBarMenu = menu;
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
actionBarMenu.findItem(R.id.follow_my_position).setIcon(R.drawable.toolbar_myposition_active);
}
好的 !问题就从这里开始。旋转屏幕时,在
NullPointerException
上出现一个actionBarMenu
。我知道...在屏幕旋转之前我没有保存它,因此通常我会去
onSaveInstanceState
并将菜单保存在那里,除了actionBarMenu
是一个界面...更具体地说是界面com。 actionbarsherlock.view.Menu,我无法对其进行修改,以使其实现Parcelable或Serializable。那么如何将接口保存在捆绑包中?
最佳答案
你不能但是,您仍然可以通过在活动中添加以下代码来保留成员变量的方向更改
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Object last = getLastNonConfigurationInstance();
if (last != null && last instanceof Menu) {
actionBarMenu = (Menu) last;
}
}
// for FragmentActivity it is onRetainCustomNonConfigurationInstance
public Object onRetainNonConfigurationInstance() {
return actionBarMenu;
};