-1

我正在使用 actionbar sherlock 开发一个应用程序。我遇到的问题是我有菜单设置并且我的所有 xml 文件都是正确的,因为我没有得到编译器和 logcat 错误。

我遇到的问题是,当我用自己的特定菜单加载片段 A 时,一切都很好。但是当我然后移动到另一个片段 B 时,片段 A 菜单出现在片段 B 上。关于导致这种情况的任何想法。

@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;
}
4

1 回答 1

0

菜单属于 Activty 而不是片段。Fragment A 和B 在同一个activity 中,所以当A 在activity 的menu 中添加了一些item,然后被Fragment B 替换时,activity 没有改变,即菜单还在。

如果您希望您的 Fragment B 具有不同的菜单项,请覆盖该onCreateOptionsMenu()方法,请记住setHasOptionsMenu(true)在 Fragment 的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);
    }
}
于 2013-09-22T03:47:08.590 回答