Подтвердить что ты не робот

Меню Упорядочение различий из-за иерархии фрагментов и активности. (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);
}

Как я могу достичь желаемого заказа меню?

4b9b3361

Ответ 1

Вы можете попробовать использовать android:menuCategory и android:orderInCategory для более подробного указания вашего заказа.

Или используйте onPrepareOptionsMenu() в HostActivity, так как он вызывается после onCreateOptionsMenu(). Недостатком является то, что он вызывается при каждом нажатии кнопки MENU, а не только в первый раз.