Обнаружение изменения вкладки ViewPager внутри фрагмента


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

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

1 64

1 ответ:

Я немного покопался и оказалось, что 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
        }
    }
}