В настоящее время я пытаюсь адаптировать свое приложение для использования «Библиотеки совместимости для Android v4», чтобы обеспечить преимущества использования фрагментов даже для пользователей Android 1.6.
Реализация контекстного меню кажется сложной:
- Основная деятельность приложения
расширяет FragmentActivity
класс.
- Все фрагменты основаны на одном
класс, расширяющий класс Fragment.
- Фрагмент класса вызывает
registerForContextMenu () в своем методе onCreateView () и переопределяет методы
onCreateContextMenu () и onContextItemSelected () .
Для onCreateContextMenu () это работает довольно хорошо. Контекстное меню надувается из файла ресурсов и немного изменяется в зависимости от выбранного элемента (который основан на listView ..., даже если фрагмент не является ListFragment).
Проблема возникает при выборе пункта контекстного меню.
onContextItemSelected () вызывается для всех существующих на данный момент фрагментов, начиная с первого добавленного.
В моем случае фрагменты используются для отображения содержимого структуры папок. Когда контекстное меню фрагмента подпапки открывается и выбирается элемент меню, onContextItemSelected () сначала вызывается на верхних уровнях (в зависимости от того, сколько фрагментов разрешено / видимо в данный момент).
Прямо сейчас я использую обходной путь для поля на уровне активности, которое содержит тег последнего фрагмента, вызывающего его onCreateContextMenu () . Таким образом, я могу вызвать «return super.onContextItemSelected (item)» в начале onContextItemSelected () , когда сохраненный тег не совпадает с getTag ().
Но такой подход мне кажется немного грязным.
Почему onContextItemSelected () вызывается для всех фрагментов? а не только тот, который вызывал onCreateContextMenu () ?
Какой самый элегантный способ справиться с этим?