У нас есть управляемое данными действие, которое создает большой набор (обычно до 100) кнопочных компонентов и помещает их в Scrollable. Каждая из кнопок надувается из ресурса и основана на RelativeLayout. Кнопка имеет два текстовых представления, два представления изображений - оба из ресурсов - и имеет фон из 9 патчей.
Размер, положение, текст и конфигурация представлений изображения определяются запросом к базе данных.
К сожалению, на макет на HTC Desire уходит 2-3 секунды, на HTC San Francisco или HTC Sapphire - 3-5 секунд.
Как только начальный макет сделан, представление работает прекрасно.
Мы испробовали несколько стратегий, которые не имели значения:
- время запроса к базе данных - это не было значительной частью задержки.
- кэшируйте кнопки, чтобы уменьшить количество инфляции макета.
- построение поддерева представлений вне иерархии «живого» представления, а затем его подключение после завершения.
- делает то же самое в другом потоке, но подключает поддерево к действию в потоке пользовательского интерфейса.
У нас есть неопределенный индикатор прогресса (spinner / throbber), который вращается, пока запрос выполняется в другом потоке, но затем останавливается, когда начинается компоновка.
Итак, мой вопрос:
- как сделать так, чтобы макеты представлений выглядели более отзывчивыми или
- как я могу избежать блокировки тоббера, пока происходит макетирование
Спасибо.
Редактировать
Скроллер настроен на горизонтальную и вертикальную прокрутку. Итак, у нас есть сетка, на которой экран является окном просмотра.
Это делает использование встроенного ListView (на первый взгляд) неподходящим для этой задачи.