Меню Упорядочение различий из-за иерархии фрагментов и активности. (OnCreateOptionsMenu)
Фон
Для Android 3.0 у меня есть HostActivity
, который является суперклассом NotebooksActivity
и NoteActivity
. NotebooksActivity
включает фрагмент NotebooksFragment
.
В HostActivity
, я включаю меню, которое я хочу отобразить в самом крайнем конце меню опций в ActionBar, i.e. все пункты меню в подклассах 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
"s.
@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);
}
Как я могу достичь желаемого заказа меню?
Ответы
Ответ 1
Вы можете попробовать использовать android:menuCategory
и android:orderInCategory
для более подробного указания вашего заказа.
Или используйте onPrepareOptionsMenu()
в HostActivity
, так как он вызывается после onCreateOptionsMenu()
. Недостатком является то, что он вызывается при каждом нажатии кнопки MENU, а не только в первый раз.