菜单排序由于片段和活动层次结构而产生的差异。 (onCreateOptionsMenu)

时间:2011-04-17 23:18:18

标签: android android-activity menu android-fragments

背景

针对Android 3.0开发,我有HostActivity,它是NotebooksActivityNoteActivity的超类。 NotebooksActivity包含一个片段NotebooksFragment

HostActivity中,我包含一个菜单,我想在ActionBar的选项菜单的最右端显示,即。 HostActivity子类中的所有菜单项都应显示在HostActivity中添加的菜单项的左侧。

HostActivity中的菜单通胀:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    final MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.host_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

问题

当我在NoteActivity中添加菜单项时,我按预期达到了所需的顺序:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.notebook_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

但是,当我在NotebooksFragment中添加菜单项时,由于片段的工作原理,onCreateOptionsMenu会在HostActivity中使用相同的方法调用,{strong>会导致{{1} }'的菜单项出现在HostActivity之前。

NotebooksFragment

如何实现所需的菜单排序?

1 个答案:

答案 0 :(得分:11)

您可以尝试使用android:menuCategoryandroid:orderInCategory更多地手动指定您的订购。

或者,在onPrepareOptionsMenu()中使用HostActivity,因为onCreateOptionsMenu()之后会调用{{1}}。缺点是每次按下MENU按钮都会调用它,而不仅仅是第一次按下。