我正在使用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;
};

10-05 18:35