2017-01-15 6 views
0

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

У меня есть один деятельность с обычаем обратно стека для поддержания правильного потока с помощью:

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

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

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

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

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

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

+0

Вы используете фрагменты в ViewPager? – rupinderjeet

+0

@rupinderjeet Нет, я использую нижний навигационный вид –

ответ

0

В конце концов я нашел проблему. onCreateView фрагмента выглядел так:

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

((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); перемещения вне если заявления фиксированного вопроса.

0

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

+0

Он вызывается, и правильное меню раздувается для каждого фрагмента. Однако фрагмент по-прежнему отображает неправильные элементы. Когда отладка неправильного пункта меню видима даже перед ударом onCreateOptionsMenu –