У меня возникла проблема со следующими методами:
int firstVisibleItemPosition = gridLayoutManager.findFirstVisibleItemPosition();
int lastVisibleItemPosition = gridLayoutManager.findLastVisibleItemPosition();
Моя цель: сохранять аналитические данные о том, какие элементы просматривал пользователь.
Чтобы сделать это, я вызываю эти методы в двух разных сценариях:
-
каждый раз, когда прокрутка переходит в состояние "бездействия" и проверяет, какие видимые элементы. в этом случае я получаю ожидаемые индексы.
-
когда
RecyclerView
становится "видимым" для пользователя. теперь, когда проблема начинается. Я ожидаю, что когда фрагмент, содержащий recylcerView, будет переданonResume()
, то вызовfindLastVisibleItemPosition()
вернет видимые элементы. , но в этом случае он возвращает -1. Я предполагаю, что это имеет какое-то отношение к асинхронной загрузке инициализации внутренних элементов recyclerView + адаптера относительно жизненного цикла фрагмента/активности.
отложив этот код на несколько миллисекунд - findLastVisibleItemPosition()
возвращает правильные индексы. но я не хочу откладывать жесткую кодировку с помощью обработчика + delayed runnable, потому что планирование замедленного запуска - это работа над тем, что я действительно хочу сделать: обнаруживать, когда просмотр ресайклера заканчивается раздуванием и рисованием на экране всех представлений, которые могут ноги внутри него.
поэтому мои вопросы в основном:
-
Как я могу определить, когда RecyclerView закончил все инициализацию/измерение/раздувание и рисование его дочерних элементов, которые находятся на экране? (перед любым взаимодействием с пользователем..).
-
Есть ли какой-либо надежный способ хорошей практики, чтобы точно знать, какие элементы в пределах 'отображения ресайклеров действительно отображаются на экране?