с конкретной задачей:
Есть скролвью, и есть алгоритм, меняющий расположение вьюх внутри него. Проблема: если скролить скролвью, не отпуская пальца, все окей, но как только отпустить и скролвью начинает самостоятельно докручиваться по инерции, возникает проблема - он каким-то образом кеширует внутренности себя и не вызывает ни под каким соусом layout. Лейаут не производится вплоть до полной остановки. Из-за этого вьюхи, которые были в одном месте и которые я хочу сдвинуть - не сдвигаются пока не произойдет остановка. Однако! Если создать новую вьюху и добавить вовнутрь - она расположится как надо. Но только если это новая вьюха, а не старая.
Исследование показало, что дело в том, что лейаутпарамс уже посчитаны и задали положение и размер, а если их (парамс) еще не было, то происходит первичный рассчет. Есть какой-то способ заинвалидировать вьюху, будто бы она еще не была никуда приаттачена?
Интересная история про блок layout pass. Судя по исходникам, скролл вью просто в onLayout сразу вызывает super.onLayout, что передает сразу управление дальше внутрь. Дебаггером ловить вызовы пробовали? Логи какие ставили на этих функциях?
requestLayout или invalidate пробовала?
Обсуждают сегодня