2012-04-10 3 views
3

У меня есть два фрагмента, один из которых - ListView, а один - «подробный». Каждый фрагмент имеет свои собственные параметры меню. Когда в ландшафтном режиме, где отображаются оба фрагмента, каждое меню объединяется в одно (которое я предполагаю по дизайну), но если я поворачиваю устройство на портрет, меню остаются объединенными и показывают параметры, которые не должны будь там. Не уверен, что мне нужно включить какой-либо код в мой вопрос.Управление опциями меню фрагментов

Edit:

Найдены это question, но добавление menu.clear() показывает только пункты меню для просмотра деталей, когда в ландшафтном и изменении назад к портрету, меню не меняется.

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

Update:

Чтобы был ясен, меню отлично работает, если устройство остается в портретном или ландшафтном режиме. Проблема возникает при повороте с пейзажа на портрет или наоборот. Меню не похоже на сброс, хотя вызывается onCreateOptionsMenu.

ответ

1

Если вы используете setRetainInstance(true), то меню не обновится. К сожалению, при удалении этого разрыва другие вещи, такие как моя AsyncTask, погибают при изменении ориентации.

0

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

Затем переопределить метод onConfigurationChanged, а также использование invalidateOptionMenu API смотрите по этой ссылке:

активность аннулирует меню опций:

http://developer.android.com/reference/android/app/Activity.html#invalidateOptionsMenu%28%29

Если это вам поможет, отметьте это сообщение как ответ.

Спасибо.

2

Я новичок здесь, поэтому извиняюсь, если я не отформатирую все в первоклассном виде. У меня тоже были похожие вопросы относительно вклада меню и Fragment s. Вот что я сделал в моем случае ...

У меня есть FragmentActivity хостинг ListFragment и дополнительный Fragment, содержащий подробную информацию о выбранном элементе списка - довольно типичный планшет. Эта дополнительная деталь Fragment не добавляется до тех пор, пока не будет выбран элемент списка ... Когда я выбираю элемент списка, я хочу, чтобы пункты меню ListFragments не вносили вклад в хостинг FragmentActivity Панель действий. (С точки зрения пользовательского интерфейса основное внимание пользователей уделяется вновь добавленному фрагменту, чтобы вернуться к предыдущему состоянию, они не выбирают элемент, который они выбрали.) Поскольку ListFragment не должен знать о другом фрагменте, чтобы обеспечить повторное использование, я обнаружил, что использование onPrepareOptionsMenu(..) метод на уровне FragmentActivity был правильным способом для меня.

Добавьте этот фрагмент кода в хостинг FragmentActivity, чтобы быстро получить нужное поведение;

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
    // 'Find' the menu items that should not be displayed - each Fragment's menu has been contributed at this point. 
    menu.findItem(id.sync).setVisible(false); 
} 
return super.onPrepareOptionsMenu(menu); 
} 

Этот метод означает, что ваши фрагменты остаются многоразовые (они по-прежнему способствуют, как изначально проектируются), но хост FragmentActivity может манипулировать UI активность, которая является одним из его уполномочил роли.

Я надеюсь, что это поможет.