Фон
У меня есть аналогичный сценарий, показанный на примере веб-сайта Android о фрагментах (ссылка здесь) :
- маленький экран, книжная ориентация: одна панель
- маленький экран, альбомная ориентация: одна панель
- 7-дюймовый планшет, книжная ориентация: одна панель
- 7-дюймовый планшет, альбомная ориентация: двойная панель, широкий
- 10-дюймовый планшет, книжная ориентация: двойная панель, узкий
- Планшет 10", альбомная ориентация: двойная панель, широкий
- ТВ, альбомная ориентация: двойное стекло, широкое
Панель действий в моем случае отображается всегда, а пока у меня в ней только элементы действий.
Эта проблема
Следующий сценарий очень странный:
Устройство имеет одну панель для книжной ориентации и 2 панели для альбомной ориентации.
Оба моих фрагмента создают свои собственные элементы панели действий.
Переключение с книжной на альбомную показывает все элементы действия (это то, что я хочу)
При переключении с ландшафта на портрет отображаются все элементы действия.
Это не имеет особого смысла, поскольку правая панель не существует, но по какой-то причине ее фрагмент кажется существующим в менеджере фрагментов, и вызывается ее onCreateOptionsMenu, хотя она вообще не отображается.
Что я пробовал
Я пытался вызвать invalidateOptionsMenu() для действия, которое содержит оба фрагмента, но это не помогло.
Я также добавил следующий код для каждого из фрагментов, и он отлично работает:
@Override
public void onStart() {
super.onStart();
setHasOptionsMenu(true);
}
@Override
public void onStop() {
super.onStop();
setHasOptionsMenu(false);
}
Вопрос
Почему это происходит?
Является ли мое решение включения/отключения optionsMenu (таким образом, включение/отключение создания элементов панели действий фрагментами) жизнеспособным решением? Есть ли лучшее решение?
Хорошо ли вообще, чтобы фрагменты обрабатывали элементы действий?