由于片段和活动层次结构导致的菜单排序差异.(在创建选项菜单上)



背景

为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中添加菜单项时,由于碎片的工作方式,onCreateOptionsMenuHostActivity中的相同方法之后被调用,导致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);
}

如何实现所需的菜单订购?

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

或者,在HostActivity中使用onPrepareOptionsMenu(),这是在onCreateOptionsMenu()之后调用的。不利的一面是,它在每次按下MENU按钮时都会被调用,而不仅仅是第一次。

最新更新