10

背景

为 Android 3.0 开发,我有一个HostActivity是 and 的超NotebooksActivityNoteActivityNotebooksActivity包括一个片段,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,由于 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);
}

我怎样才能实现我想要的菜单订购?

4

1 回答 1

11

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

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

于 2011-04-17T23:33:49.233 回答