@KartoshkaD

Как победить recycling в RecyclerView или альтернативные решения проблемы?

привет, я джун в одной из огромного количества студий

столкнулся с достаточно сложной на мой взгляд задачей:
есть сетка, которая может менять свою конфигурацию (4 столбика, 2 столбика, 1 столбик и 2 столбика с первым элементом, который растянут на два столбика), поддерживает драгНдроп
элементы сетки - потоки RTSP с камер видеонаблюдение
сложность в том, что есть необходимость менять конфигурации сетки без перезагрузки видео (и по возможности скролить)

решения:
1. FlexboxLayout - отлично подходит для этой задачи, за исключением встроенного красивого драгНдропа
2. RecyclerView + FlexboxLayoutManager - отличное решение, сейчас выбрал его как основное, но есть проблемы:
#1 получается менять только ширину вьюшек, а высота остается прежней (спасает notifyDataSetChanged(), но тогда происходит перезагрузка потока)
#2 при выходе вьюшки за пределы видимости, она быстро детачится и при повторном её появлении видео грузится заново (тут нужно увеличить "threshold". пробовал `RecyclerView#setItemViewCacheSize(int)` и `RecycledViewPool#setMaxRecycledViews(int, int)`, но никакого результата не последовало)

Так же буду рад, если подскажете направления для ресерча или альтернативные решения

P.S. элемент сетки должен сохранять отношение сторон 16:9, но это решается с помощью `PercentFrameLayout` в идеале
P.P.S. при попытке редактировать размер View, которые в данный момент не на экране, ловлю NPE, но это, вроде как, логично
  • Вопрос задан
  • 339 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
По-моему, в идеале вам надо это решать не "побежданием" ресайклинга, а улучшением архитектуры. Нужен некий репозиторий, где будут кешироваться видео на недолгое время. Когда ресайклер хочет показывать - брать поток из репозитория.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы