Фрагменты с одинаковым меню на одной и той же схеме вызывают дублирование пункта меню. - PullRequest
12 голосов
/ 12 декабря 2011

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

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

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

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

Ответы [ 4 ]

24 голосов
/ 14 декабря 2011

Я нашел не очень хорошее решение.В 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.

2 голосов
/ 10 сентября 2012

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

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

0 голосов
/ 28 сентября 2016

Я нашел работу вокруг, что это работает для меня. В методе onOptionsItemSelected сначала я проверяю, равен ли класс классу или нет, который я получаю из фрагментаManager с помощью 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
    }
0 голосов
/ 12 декабря 2011

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

  • , тогда может случиться так, что будут показаны все опционные меню.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...