片段,ActionBarSherlock和菜单

时间:2013-03-19 17:09:13

标签: android android-fragments actionbarsherlock

我正在使用ActionBarSherlock库和片段。但是,在第二个片段出现后,我很难在屏幕上显示菜单。 这是一个非常简单的程序,有一个屏幕跟着另一个。我使用FragmentTransaction,每次都更换。我在每个片段中使用setHasOptionsMenu(true)。 onCreateOptionsMenu& onPrepareOptionsMenu正在被调用,但我的菜单有一个空白区域。我可以选择该区域,它似乎工作,但没有文字。 有任何想法吗? 片段代码:

public class MyListFragment extends SherlockListFragment {  
@Override  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setHasOptionsMenu(true);  
}  
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        if (menu.findItem(R.id.save) == null) {
            menu.clear();
            inflater.inflate(R.menu.new_menu, menu);
        }
    }

的活动:

public class MyMain extends SherlockFragmentActivity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportFragmentManager = getSupportFragmentManager();
        handler = new Handler();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
}

片段代码

fragmentEntries.push(stackEntry);
FragmentTransaction ft = mFragmentManager.beginTransaction();
ft.replace(contentId, fragment, fragmentName);
ft.commit();

2 个答案:

答案 0 :(得分:0)

onCreateOptionsMenu只会按documentation ..

调用一次
  

系统调用onCreateOptionsMenu()后,它会保留您填充的菜单实例,并且不会再次调用onCreateOptionsMenu(),除非由于某种原因菜单失效。但是,您应该仅使用onCreateOptionsMenu()来创建初始菜单状态,而不是在活动生命周期中进行更改。

     

如果要根据活动生命周期中发生的事件修改选项菜单,可以在onPrepareOptionsMenu()方法中执行此操作。此方法会将Menu对象传递给当前存在,以便您可以对其进行修改,例如添加,删除或禁用项目。 (片段还提供onPrepareOptionsMenu()回调。)

答案 1 :(得分:0)

看起来这只是一个愚蠢的错误。我有一个带有图标的菜单(这是一个选择器)似乎模糊了文本。 我的测试也失败了,因为我正在使用具有相同ID的项目的菜单。