Использование меню опций в многофрагментном действии


У меня есть FragmentActivity, который содержит FragmentStatePagerAdapter. Пейджер содержит несколько экземпляров одного и того же фрагмента, чтобы пользователь мог перемещаться между элементами списка. Я хочу иметь возможность предоставить пользователю меню опций, которое будет действовать только на видимый пункт.

Например, у меня есть список изображений, отображаемых в imageviews внутри фрагментов. Мне нужен пункт меню опций, позволяющий пользователю установить изображение в качестве обоев.

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

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

3 4

3 ответа:

Мое решение состояло в том, чтобы использовать метод setOnPageChangeListener ViewPager, чтобы отслеживать, какой индекс Fragment в настоящее время виден с обратным вызовом onPageSelected. Вы все еще должны получить исходный индекс самостоятельно, но в моем случае это было тривиально

Вы можете перехватить обратный вызов меню options в onOptionsItemSelected действия и явно вызвать элемент из правильного фрагмента там, возвращая true, чтобы указать, что вы обработали его.

Хитрость заключается в том, чтобы изменить sethasoptions( верно|неверно) на каждый фрагмент до меню заполнения. Это уже помогло мне