Android 由于片段和活动层次结构而导致的菜单顺序差异。(OnCreateOptions菜单)
背景 为Android 3.0开发,我有一个Android 由于片段和活动层次结构而导致的菜单顺序差异。(OnCreateOptions菜单),android,android-activity,menu,android-fragments,Android,Android Activity,Menu,Android Fragments,背景 为Android 3.0开发,我有一个HostActivity,它是NoteBookActivity和NoteActivity的超类NotebooksActivity包括一个片段,NotebooksFragment 在HostActivity中,我在操作栏的选项菜单的最右端包含了一个菜单,即HostActivity子类中的所有菜单项应显示在HostActivity中添加的菜单项的左侧 @Override public void onCreateOptionsMenu(Menu menu,
HostActivity
,它是NoteBookActivity
和NoteActivity
的超类NotebooksActivity
包括一个片段,NotebooksFragment
在HostActivity
中,我在操作栏的选项菜单的最右端包含了一个菜单,即HostActivity
子类中的所有菜单项应显示在HostActivity
中添加的菜单项的左侧
@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);
}
主机活动中的菜单膨胀:
@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
中添加菜单项时,由于片段的工作方式,在HostActivity
中的相同方法之后调用了oncreateoptions菜单项,导致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
中使用onPrepareOptions菜单()
,正如在onCreateOptions菜单()之后调用的那样。缺点是每次按下菜单按钮时都会调用它,而不仅仅是第一次。我尝试了onPrepareOptionsMenu()方法,结果成功了。然而,由于某种原因,它在我的Xoom上被调用了两次,因此我不得不添加一些额外的代码来防止重复。我使用android:menuCategory
和android:orderInCategory
解决了这个问题。我尝试通过代码添加片段菜单项,但没有成功,因此我被迫使用XML菜单:(对我来说,将android:menuCategory=“secondary”
添加到活动项就足够了,这些活动项应该显示在mehu的末尾。不需要额外的排序属性。