我的应用使用标签导航和Actionbar Sherlock在两个片段之间切换,每个片段都有自己的列表视图。此外,每个片段都有自己的选项菜单,因此在我的两个片段类中,我已经使用了:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
...
}
对于其中一个片段,根据用户在其列表中选择的项目,使其选项菜单中的某些选项变灰是很重要的。我这样做是通过调用:
@Override
public void onPrepareOptionsMenu(Menu menu){
...
}
在此方法中,我确定已检查列表中的哪些项目。我注意到当我在标签之间切换时,会立即调用onPrepareOptionsMenu。然后,下次按下菜单键时,不会调用onPrepareOptionsMenu,并且不会更新菜单中的可用选项。当我第二次点击菜单按钮时,一切正常,可用选项得到更新。在Tab键切换后按下菜单键时,是否可以强制执行onPrepareOptionsMenu?
我已经看到有关使用invalidateOptionsMenu()来触发onPrepareOptionsMenu的注意事项,但每次覆盖菜单键事件时看起来很麻烦,而这个问题仅在用户第一次按下菜单键时出现。还有更好的方法吗?