#android #fragment
Вопрос:
Как проверить, виден ли фрагмент пользователю в приложении для Android?
У меня есть приложение, в котором в доме activity
их несколько fragments
. Один из фрагментов прослушивает события из другого действия, запущенного из дома, и, следовательно, выполняет метод каждый раз, когда я возвращаюсь домой из этого действия. В то время как я хочу, чтобы эти события запускались только и выполнялся метод, если фрагмент виден пользователю на переднем плане.
Я попробовал следующее, но, похоже, ничего не получилось:
isAdded()
иisVisible()
проверьте — всегда возвращайтесьtrue
, как только фрагмент будет создан, независимо от того, действительно ли фрагмент виден пользователю или нет.getUserVisibleHint()
— это снова вернулосьtrue
бы, даже если бы я все еще занимался другой деятельностью. Кроме того, он также устарел, поэтому, даже если бы это сработало, я бы хотел поискать другое решение.
Я зашел в тупик, чтобы найти реальный рабочий способ проверить, действительно ли фрагмент виден пользователю, а не просто добавлен в память.
Любая помощь в этом приветствуется!
Ответ №1:
Я, наконец, наткнулся на решение, пытаясь сам:
Простая проверка isResumed()
, и она вернет значение true только в том случае, если фрагмент находится на переднем плане и возобновлен.
Просто на всякий случай проверьте, для isVisible
чего также isAdded
выполняется внутренняя проверка и уменьшит состояние, поэтому простое if-condition
:
if (isVisible() amp;amp; isResumed()) {
// perform your action here
}
Это сработало для меня!
Комментарии:
1. Почему вы добавили
isResumed()
? А что, если над фрагментом отображается фрагмент диалога? В этом случае фрагмент уже виден.2. 1. Если над ним находится другой фрагмент или фрагмент диалога, предыдущий фрагмент не вернет значение true
isResumed
, пока диалоговое окно не будет закрыто и фрагмент не выйдет на передний план. 2. Мой вариант использования возвращался из другого действия обратно к этому фрагменту вместо любого другого случая, такого как диалог или что-то еще, для которого статус возобновления, похоже, работает для меня.