Как обрабатывать onContextItemSelected в мультифрагментном действии?

I ' расширяет FragmentActivity class.

  • Все фрагменты основаны на одном класс, который расширяет класс Fragment.
  • Класс фрагмента вызывает registerForContextMenu () в своем методе onCreateView () и переопределяет методы onCreateContextMenu () и onContextItemSelected () .
  • Для onCreateContextMenu () это работает очень хорошо. Контекстное меню создается из файла ресурсов и немного изменяется в зависимости от выбранного элемента (который основан на listView ... даже если фрагмент не является ListFragment).

    Проблема возникает, когда выбран элемент контекстного меню . onContextItemSelected () вызывается для всех существующих в настоящее время фрагментов, начиная с первого добавленного.

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

    Прямо сейчас я использую обходной путь с помощью поля на уровне активности, которое содержит тег последнего фрагмента, вызывающего его onCreateContextMenu () . Таким образом, я могу вызвать "return super.onContextItemSelected (item)" в начале onContextItemSelected () , когда сохраненный тег не совпадает с getTag (). Но мне этот подход кажется немного грязным.

    Почему onContextItemSelected () вызывается для всех фрагментов? а не только тот, который вызывал onCreateContextMenu () ?

    Каков самый элегантный способ справиться с этим?

    68
    задан Jonathan Soifer 21 May 2016 в 14:37
    поделиться