Фрагмент отображает неправильные пункты меню
По неизвестной причине иногда мой фрагмент показывает пункты меню, которые принадлежат другому фрагменту.
У меня есть одно действие с пользовательским задним стеком, чтобы поддерживать правильный поток, используя:
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 вызывается для всего фрагмента или нет.