2013-03-19 164 views
1

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

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(); 
+1

你能为活动和片段张贴代码? – 2013-03-19 19:34:58

+0

要添加的片段,我简单地使用:\t \t fragmentEntries.push(stackEntry); \t \t FragmentTransaction英尺= mFragmentManager.beginTransaction(); \t \t ft.replace(contentId,fragment,fragmentName); \t \t ft.commit();该活动只是一个SherlockFragmentActivity该片段放'setHasOptionsMenu(true);'在onCreate – kevindavmoore 2013-03-21 21:38:05

回答

0

onCreateOptionsMenu只能得到每documentation调用一次..

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

如果要修改基于活动的生命周期期间发生的事件的选项菜单中,您可以在onPrepareOptionsMenu()方法做到这一点。该方法将当前存在的Menu对象传递给您,以便您可以对其进行修改,例如添加,删除或禁用项目。 (片段还提供onPrepareOptionsMenu()回调)。

+0

我正在做这一切。当我调试并查看菜单时,它包含我所有的项目,但不显示。我注意到,当我调试时,我的菜单会显示,直到我调用menuItem.setVisible(true),然后消失。 – kevindavmoore 2013-03-19 23:26:49

+0

上面介绍的代码中的代码在哪里?您可以添加关于菜单/操作栏的_anything_吗? – 2013-03-24 19:26:01

0

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