背景
开发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中添加菜单项时,由于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); }
如何实现我所需的菜单订购?
解决方法
你可以尝试使用android:menuCategory和android:orderInCategory来更多地手动指定你的订购.
或者,在HostActivity中使用onPrepareOptionsMenu(),因为在onCreateOptionsMenu()之后调用.不利的是,它是每个MENU按钮按下,而不仅仅是第一次.