【问题标题】:Fragments, ActionBarSherlock and Menus片段、ActionBarSherlock 和菜单
【发布时间】:2013-03-19 17:09:13
【问题描述】:

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

【问题讨论】:

  • 你能发布 Activity 和 Fragment 的代码吗?
  • 添加一个片段,我简单地使用:fragmentEntries.push(stackEntry); FragmentTransaction ft = mFragmentManager.beginTransaction(); ft.replace(contentId, 片段, 片段名称); ft.commit();该活动只是一个 SherlockFragmentActivity 片段将setHasOptionsMenu(true); 放入 onCreate

标签: android android-fragments actionbarsherlock


【解决方案1】:

onCreateOptionsMenu 每个documentation.. 只会被调用一次。

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

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

【讨论】:

  • 我正在做这一切。当我调试并查看菜单时,它包含我的所有项目,但没有显示。我注意到,当我调试时,我的菜单会显示出来,直到我调用 menuItem.setVisible(true) 然后它就消失了。
  • 以上代码中的这段代码在哪里?您能否添加您对菜单/操作栏所做的任何操作?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多