1

我正在使用 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();
4

2 回答 2

0

每个文档只会调用一次 onCreateOptionsMenu ..

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

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

于 2013-03-19T18:45:48.677 回答
0

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

于 2013-03-25T01:41:04.223 回答