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

Jon*_*lis 10 android menu android-fragments android-activity

背景

对于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);
}
Run Code Online (Sandbox Code Playgroud)

问题

当我添加菜单项时NoteActivity,我按预期实现了所需的顺序:

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

但是,当我添加菜单项时NotebooksFragment,由于Fragments的工作方式,onCreateOptionsMenu在相同的方法之后调用HostActivity,导致HostActivity菜单项出现在之前NotebooksFragment.

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.notebooks_menu, menu);
    SearchView sv = new SearchView(getActivity());
    sv.setOnQueryTextListener(this);
    menu.findItem(R.id.search_notebooks).setActionView(sv);

    super.onCreateOptionsMenu(menu, inflater);
}
Run Code Online (Sandbox Code Playgroud)

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

Com*_*are 11

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

或者,使用onPrepareOptionsMenu()in HostActivity,因为之后被称为onCreateOptionsMenu().缺点是每次按下MENU按钮都会调用它,而不仅仅是第一次按下.

  • 对我来说,足以将"android:menuCategory ="secondary"添加到应该出现在mehu末尾的活动项目中.不需要额外的订购属性. (12认同)