背景
为Android 3.0开发,我有一个HostActivity
,它是NotebooksActivity
和NoteActivity
的超类。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
中的相同方法之后被调用,导致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:menuCategory
和android:orderInCategory
来更手动地指定您的订单。
或者,在HostActivity
中使用onPrepareOptionsMenu()
,这是在onCreateOptionsMenu()
之后调用的。不利的一面是,它在每次按下MENU按钮时都会被调用,而不仅仅是第一次。