Обнаруживать, когда фрагмент становится видимым
Почему не дубликат: Рекомендуемое сообщение работает только для viewpager или когда вызывается onResume.
У меня есть listfragment и detailfragment. Фрагмент детали открывается при нажатии элемента списка. Я выполняю это, сокрывая listfragment, и я показываю detailfragment. Когда пользователь вернется, он вернется к списку фрагментов.
Как узнать, когда пользователь вернется к моему фрагменту или когда мой фрагмент будет виден?
Обратите внимание, что я хотел бы продолжать использовать .hide() и show() и что я ищу слушателя или onVisible, чтобы проверить, когда фрагмент станет видимым, а не метод проверки его видимости.
Ответы
Ответ 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 );
}
и ваша деятельность должна будет его реализовать.
Это может быть проще с библиотекой автобусов событий, например