Подтвердить что ты не робот

Обнаруживать, когда фрагмент становится видимым

Почему не дубликат: Рекомендуемое сообщение работает только для viewpager или когда вызывается onResume.

У меня есть listfragment и detailfragment. Фрагмент детали открывается при нажатии элемента списка. Я выполняю это, сокрывая listfragment, и я показываю detailfragment. Когда пользователь вернется, он вернется к списку фрагментов.

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

Обратите внимание, что я хотел бы продолжать использовать .hide() и show() и что я ищу слушателя или onVisible, чтобы проверить, когда фрагмент станет видимым, а не метод проверки его видимости.

4b9b3361

Ответ 1

EDIT:
Как указано в комментариях, setUserVisbileHint() не вызывается автоматически, а FragmentPageAdapter при использовании в ViewPager.

Для сценария, описанного в вопросе, подходит onHiddenChanged(boolean hidden) http://developer.android.com/reference/android/app/Fragment.html#onHiddenChanged(boolean).
Как указано в документации, метод вызывается каждый раз, когда изменяется скрытое состояние фрагментов, но не на начальной настройке фрагмента.


Вы можете использовать setUserVisibleHint() http://developer.android.com/reference/android/support/v4/app/Fragment.html#setUserVisibleHint(boolean)

если isVisibleToUser установлен в true, фрагмент должен отображаться.

Ответ 2

Подробнее о методе: Фрагмент. IsVisible()

Пример:

MyFragmentClass test = (MyFragmentClass) getSupportFragmentManager().findFragmentById("myFragnmentID");
if (test != null && test.isVisible()) {
     //VISIBLE! =)
}
else {
    //NOT VISIBLE =(
}

Ответ 3

Вы можете отправить событие в свою активность при запуске фрагмента: https://www.inkling.com/read/programming-android-mednieks-1st/chapter-11/visualizing-the-fragment-life

Переопределяя метод onStart:

@Override
public void onStart() {
    super.onStart();
    ((MyInterface)getActivity()).onFragmentIsVisible( this );
}

Где MyInterface - интерфейс:

public MyInterface {
   public void onFragmentVisible( Fragment fragment );
}

и ваша деятельность должна будет его реализовать.

Это может быть проще с библиотекой автобусов событий, например