Android — NestedFragments участвуют в заполнении меню параметров

Я реализую новую функцию вложенных фрагментов и столкнулся с проблемой. моя точка зрения в основном такова: основное действие (A), которое включает фрагмент (B), этот фрагмент (B) включает адаптер пейджера который имеет 3 страницы, каждая из которых также является фрагментом (C). ранее для нового getchildfragmentmanger это было невозможно, но работает отлично. но возникла одна проблема: я хочу, чтобы фрагменты C могли участвовать в заполнении меню параметров. я устал помещать setHasOptionsMenu(true) в метод onActivityCreated для каждого из моих фрагментов C и переопределять также onCreateOptionsMenu, но ничего не происходит... если я пытаюсь заполнить меню из фрагмента B (который является контейнером адаптера пейджера) я могу изменить пункты меню...

Есть предположения ?

Спасибо.


person senior    schedule 09.12.2012    source источник


Ответы (2)


Да, они могут.

В Android 4.2 или версии библиотеки поддержки 11 вложенные фрагменты участвуют в заполнении меню опций, так как всегда вам нужно вызывать setHasOptionsMenu(true) во время onCreate().

Но если вы используете ActionBarSherlock, они этого не сделают, вам придется вручную вызывать из родительского фрагмента onCreateOptionsMenu() метод вложенного фрагмента onCreateOptionsMenu().

Обновление: проблема

person kreker    schedule 18.02.2013
comment
Вы уверены, что? Я использую ActionBarSherlock, но, насколько мне известно, ABS использует обычный ActionBar, когда устройство находится выше ICS. Я использую вложенные фрагменты и поддерживаю версию 11, но меню не создается. - person tasomaniac; 19.02.2013
comment
@tasomaniac Да, я уверен. И всегда можно заглянуть в исходники АБС и андроида, как это сделал я. Проблема не в панели действий, проблема в том, как ABS обрабатывает вызовы onCreateOptionsPanel() от FragmentActivity к фрагментам, а не к вложенным фрагментам. - person kreker; 21.02.2013
comment
Вы говорите, что если я не использую ActionBarSherlock и скомпилирую его с Android 4.0 и использую библиотеку поддержки, я смогу использовать onCreateOptionsMenu во вложенных фрагментах? - person tasomaniac; 21.02.2013
comment
@tasomaniac Да, и не только с версии Android 4.0, библиотека поддержки работает на Android 1.6 и выше. И вы также можете использовать onCreateOptionsMenu() с ActionBarSherlock, как я написал в своем ответе. - person kreker; 21.02.2013
comment
Хорошо, это имеет смысл. Я вызывал его вручную. Надеюсь, Джейк Уортон исправит это в следующем обновлении. - person tasomaniac; 21.02.2013
comment
Спасибо за ваш вклад, это сэкономило мне довольно много времени. - person Bogdan Zurac; 22.02.2013
comment
@kreker эта проблема решена или нет? или любое альтернативное решение доступно? Я получаю ту же проблему SherlockActivity (с панелью навигации) ----> SherlockFragmentTabstrip (withpagerAdapter) --> SherlockFragment (дочерний фрагмент, который мне не удалось вызвать в меню параметров) - person LOG_TAG; 09.10.2013
comment
@kreker Спасибо! Можете ли вы объяснить, как вызвать onCreateOptionsMenu() дочернего фрагмента вручную из родительского фрагмента? так? getChildFragmentManager().onCreateOptionsMenu() в родительском фрагменте? это не работает! похоже, я перешел с ABS на ABC? - person LOG_TAG; 10.10.2013
comment
@LOG_TAG ну, найди их как-нибудь в коде... Я не использовал ABC. - person kreker; 10.10.2013

Из моего чтения исходного кода видно, что реализации FragmentManager и Activity работают только с корнем FragmentManager для добавления в меню параметров/панель действий, а не с дочерними экземплярами FragmentManager.

Фрагмент B, предположительно, должен будет управлять меню параметров/панелью действий от имени содержимого ViewPager, изменяя то, что находится в меню параметров/панели действий, в зависимости от того, какие страницы отображаются и скрываются в пейджере.

person CommonsWare    schedule 09.12.2012
comment
привет CommonsWare, спасибо за ваш быстрый повтор, это то, что я в итоге сделал, но я надеялся на более инкапсулированное решение. - person senior; 09.12.2012
comment
Да..!! я тоже застрял в этом вопросе .. и я сделал то, что сказал Марк Мерфи .. Спасибо Марк - person Sandeep Dhull; 10.06.2013
comment
могу я узнать, как работает ваш обходной путь? все перепробовал, все равно хреново.. - person Zyoo; 18.09.2013