Различия в заказе меню из-за иерархии фрагментов и действий.(OnCreateOptionsMenu) - PullRequest
10 голосов
/ 18 апреля 2011

Фон

При разработке для Android 3.0 у меня есть HostActivity, который является суперклассом NotebooksActivity и NoteActivity.NotebooksActivity включает фрагмент, NotebooksFragment.

В HostActivity я включаю меню, которое я хочу отобразить в крайнем правом конце меню параметров в панели действий, , то есть все элементы менюв подклассах 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);
}

Как мне добиться желаемого порядка меню?

1 Ответ

11 голосов
/ 18 апреля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...