我正在使用actionbar sherlock开发一个应用程序。我遇到的问题是我有菜单设置,所有的xml文件都是正确的,因为我没有编译器和logcat错误。
我遇到的问题是当我用自己的特定菜单加载片段A时,一切都很好。但是当我移动到另一个片段B时,片段A上出现片段A菜单。任何想法都会导致这种情况发生。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.product_allergy, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch(item.getItemId()){
case R.id.productClear:
addtoList();
break;
}
return true;
}
答案 0 :(得分:0)
菜单属于Activty而不是片段。片段A和B处于相同的活动中,因此当A将一些项目添加到活动的菜单中然后它被片段B替换时,活动不会改变,即菜单仍然存在。
如果您希望片段B具有不同的菜单项,请覆盖onCreateOptionsMenu()
方法,请记住片段setHasOptionsMenu(true)
方法中的onCreate()
。
仅供参考,如果您只想清除之前片段的菜单项,请在menu.clear()
中致电onCreateOptionsMenu()
。
修改强> 当您尝试以片段形式处理操作栏回调时,您应该执行以下操作:
@override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.fragmentActionBarButton:
//your code
return true;
default:
return super.onOptionsItemSelected(item);
}
}