Вкладки ActionBarCompat +: удалить элемент меню фрагмента при переключении?

Для каждого фрагмента я добавлю пункты меню, чтобы предоставить пользователю действия, связанные с контекстом. Но при переключении на другой Фрагмент пункты меню остались. Так что я могу закончить со всеми опциями из каждого фрагмента в меню.

Как вы очищаете пункт меню, чтобы в меню действий были настроены только те, которые настроены?

Я читал о invalidateOptionMenu() и onPrepareOPtionmenu(), но не совсем понимаю, как они работают. Как правильно это реализовать?

В любом случае, почему удаление элемента меню, связанного с фрагментом, когда фрагмент больше не отображается, не является родным поведением Android?

РЕДАКТИРОВАТЬ, если инструкции недостаточно ясны.

  • У меня есть одно действие, поддерживающее Navigation_Mode_Tabs с настройками в качестве элемента глобального меню.
  • Я запускаю fragA, добавляющий itemA1 и itemA2. Итак, у меня есть настройка, itemA1, itemA2. Все идет нормально.
  • Затем я переключаюсь на fragB, который добавляет свой собственный itemB. ЗДЕСЬ у меня есть настройки, пункт A1, пункт A2, пункт B в меню!

Почему элементы A1 и A2 застряли? Как их удалить?

РЕДАКТИРОВАТЬ 2: я попробовал другую настройку табуляции из этого post и вдруг пункты меню вроде правильно удаляются! Это можно увидеть при использовании remove(R.id.container, фрагмент) по сравнению с onDetach()/onAttach(), которые Google рекомендует здесь

Присматриваюсь к этому, наверное завтра обновлю. Пожалуйста, если вы знаете об этом, поделитесь :)


person Poutrathor    schedule 13.08.2013    source источник


Ответы (2)


вы можете установить menuinflater для каждого действия.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.demo, menu);
    return true;
}
person JavaDM    schedule 13.08.2013
comment
? У меня есть одно действие и несколько фрагментов, для каждого из которых я использую onCreateOptionsMenu для установки пункта меню. Я не понимаю, как это может решить мою проблему, но спасибо - person Poutrathor; 13.08.2013
comment
если вы вызываете другой фрагмент, вы можете переопределить текущее меню параметров - person JavaDM; 13.08.2013
comment
да, это то, что я делаю. Я не знаю другого способа добавить меню элементов, связанных с фрагментами. - person Poutrathor; 13.08.2013

Вы должны добавить TabListener на свои вкладки и вызвать supportInvalidateOptionsMenu() в методе onTabSelected(). Это вызывает вызов onCreateOptionsMenu(). Вы должны переопределить его в своей деятельности и раздуть меню для выбранного фрагмента. Если вы добавляете пункты меню из кода, не забудьте очистить меню для предыдущего фрагмента.

person Alex Askerov    schedule 13.08.2013
comment
Я уже пробовал с invalidateOptionMenu() в onTabSelect(). Я не использую поддержку, потому что у меня есть appcompat ActionBarActivity. Смотрите мое последнее редактирование, если вы все еще заинтересованы в этом вопросе. - person Poutrathor; 13.08.2013