Фрагмент отображает неправильные пункты меню

По неизвестной причине иногда мой фрагмент показывает пункты меню, которые принадлежат другому фрагменту.

У меня есть одно действие с пользовательским задним стеком, чтобы поддерживать правильный поток, используя:

 Map<Integer, List<Fragment>> fragmentStack = new HashMap<>();

Таким образом, каждая "вкладка" имеет свой собственный backstack. Я переключаюсь между фрагментами с помощью:

 getSupportFragmentManager().beginTransaction()
    .replace(R.id.container, fragment)
    .commitNow();

Фрагменты сохраняются на карте, поэтому при переключении на существующий фрагмент я использую его уже инициализированное представление.
Иногда, когда я переключаюсь с одного фрагмента на второй, второй фрагмент отображает пункты меню из ранее созданного фрагмента в стеке, несмотря на то, что onCreateOptionsMenu правильно вызывается во втором фрагменте.

Как мне преодолеть это нежелательное поведение?

Действия, которые приводят к такому поведению:
1. Начиная с первой вкладки. Карта инициализируется с ключом 0, с List<fragment> с одним фрагментом, называемым А. Этот фрагмент затем отображается. (фрагмент А имеет пункты меню)
2. Переход на вторую вкладку. Карта инициализирована с ключом 1, с List<fragment> с одним фрагментом, называемым B, этот фрагмент отображается (заменяя фрагмент A). Фрагмент B также имеет пункты меню.
3. Вернитесь к первой вкладке. Используется предыдущий фрагмент A, включая уже инициализированное представление (без надувания нового).
4. Нажатие чего-либо с помощью кнопки открывает новый фрагмент C, оставаясь на той же вкладке. фрагмент C добавляется в список фрагментов под ключом 0 карты. фрагмент C не имеет пунктов меню.
5. Переход на вторую вкладку. Предыдущий фрагмент B отображается, но с пунктами меню фрагмента A!

2 ответа

Решение

Я нашел проблему в конце концов. OnCreateView фрагмента выглядел следующим образом:

if (rootView == null) {
// Init view logic and inflation, and:
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
}
return rootView;

перемещая ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); вне оператора if исправил проблему.

Проверка onCreateOptionsMenu вызывается для всего фрагмента или нет.

Другие вопросы по тегам