У меня есть набор из 3 фрагментов «верхнего уровня», каждый из которых использует свои собственные диспетчеры дочерних фрагментов, чтобы предложить навигацию по детализации. Эти фрагменты верхнего уровня переключаются путем замены с помощью диспетчера фрагментов поддержки основного действия.
У одного из этих фрагментов верхнего уровня есть дочерний фрагмент, который добавляет пункт меню на панель инструментов/панель действий с помощью setHasOptionsMenu()
и onCreateOptionsMenu()
, и это прекрасно работает.
Теперь проблема, которую я только что заметил, заключается в следующем:
Когда добавляется новый дочерний фрагмент и дочерний фрагмент с пунктом меню скрыт (и транзакция добавляется в задний стек фрагмента верхнего уровня), пункт меню исчезает. Точно так же, когда фрагмент снова становится видимым при отмене транзакции, пункт меню возвращается. Это желаемое поведение, и, похоже, оно полностью обрабатывается фреймворком Fragment.
ОДНАКО, если дочерний фрагмент виден (и, следовательно, его пункт меню присутствует на панели инструментов) и я переключаю фрагменты верхнего уровня, пункт меню остается на панели инструментов.
Я ожидал, что пункт меню будет очищен, так как не только дочерний фрагмент, которому он принадлежит, был сброшен, но даже его родительский фрагмент (один из фрагментов верхнего уровня) также был полностью заменен (даже не добавлен в backstack, сразу заменили).
Я полагаю, что мог бы просто вызывать invalidateOptionsMenu()
для действия всякий раз, когда входящий фрагмент верхнего уровня возобновляется, но я чувствую, что мне не хватает чего-то, чтобы он обрабатывался автоматически, как при навигации внутри фрагмента верхнего уровня.