Обнаружить изменение вкладки ViewPager внутри Fragment - PullRequest
65 голосов
/ 20 марта 2012

У меня есть ViewPager с несколькими фрагментами. В одном Fragment я играю аудио. Когда я перемещаюсь к другому фрагменту, я хочу остановить воспроизведение звука. Как мне обнаружить, что другой фрагмент теперь виден в ViewPager?

Я пытался переопределить onStop и onHiddenChanged. Нет успеха Должен быть какой-то метод «ты больше не активен», который нужно переопределить. Нет

1 Ответ

137 голосов
/ 20 марта 2012

Я немного покопался, и оказалось, что ViewPager вызовет оба: setUserVisibleHint и setMenuVisibility.Я бы переопределил setUserVisibleHint, поскольку документация для setUserVisibleHint гласит:

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

Попробуйте добавить этот код в свой фрагмент:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    // Make sure that we are currently visible
    if (this.isVisible()) {
        // If we are becoming invisible, then...
        if (!isVisibleToUser) {
            Log.d("MyFragment", "Not visible anymore.  Stopping audio.");
            // TODO stop audio playback
        }
    }
}
...