Intereting Posts
Как отключить домашнюю и другие системные кнопки в Android? Создание оверлей системы, где домашние кнопки все еще работают? Константы типа android – sms Когда вызываются onSaveInstanceState () и onRestoreInstanceState (), точно? Retrofit SocketTimeOutException при отправке многопартийных или JSON-данных в android Виджет с поставщиком контента; Невозможно использовать ReadPermission? Как запустить активность в фоновом режиме на Android Android – в чем смысл StableID? Как создать экран слайдера (как в Tweetdeck) в Android? Как создать пользовательское голосовое действие для моего приложения? Как прокрутить до центра дочернего элемента HorizontalScrollView? Android-Libgdx, вызов другой активности после запуска игры на кнопке Каков наилучший способ загрузки 1000+ записей на сервер, который также содержит изображения для каждой записи из приложения iOS / Android? Просмотр Recycler внутри NestedScrollView вызывает прокрутку для начала в середине Как применить собственный стиль к SwitchCompat

Фрагменты, с тем же меню, на том же макете вызывают дублирование меню

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

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

Или, возможно, лучше, создайте 2 разных меню. Один для макетов, в котором один из этих фрагментов один (который используется в устройстве с маленьким экраном), а другой для макета, имеющего оба фрагмента. Как я могу это сделать?

Изменить: я использую библиотеку ActionBarSherlock для обратной совместимости, и я тестирую ее на эмуляторе Android 3.0.

Solutions Collecting From Web of "Фрагменты, с тем же меню, на том же макете вызывают дублирование меню"

Я нашел не очень хорошее решение. В onCreateOptionsMenu () каждого фрагмента вызовите menu.clear (), чтобы удалить любой существующий элемент меню перед тем, как надуть меню.

@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.clear(); inflater.inflate(R.menu.main, menu); super.onCreateOptionsMenu(menu, inflater); } 

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

Я опаздываю, но, возможно, это может помочь другим. Это звучит как дизайнерский запах (если этот термин существует).

Если оба фрагмента имеют одинаковые элементы меню, и не имеет значения, какие элементы этого фрагмента используются (то есть не имеет значения, если вы щелкнете элемент 1 фрагмента A или элемент 1 фрагмента B), то, вероятно, меню не должно Быть частью фрагмента, но деятельности. Это решило бы дублирование.

Вы называете супер метод createOptionMenu?

  • То может случиться так, что будут показаны все опции.

Я нашел работу вокруг, что она работает для меня. В методе onOptionsItemSelected сначала я делаю свою проверку, если класс, равный или не относящийся к классу i, получает от instanceManager с помощью findFragmentById (R.id.content_frame) .getClass ()

Я получил что-то вроде этого

  @Override public boolean onOptionsItemSelected(MenuItem item) { if( this.class != getFragmentManager().findFragmentById(R.id.content_frame).getClass() ) { return false; // must do nothing } // do your menu stuff }