#apache-flex
#apache-flex
Вопрос:
Я пытаюсь создать свой собственный компонент, который ведет себя как список и поддерживает бесконечную прокрутку (в одномерном: вертикальном или горизонтальном) — в обоих направлениях. Например, вертикально расположенный список, который пользователь может прокручивать вверх или вниз вечно — даже не нажимая на «последний» или «первый» элемент. Хорошее применение для этого: календарь, который отображает каждый месяц в виде элемента списка.
В любом случае, есть куча вещей, которые нужно преодолеть. Первый из которых, я думаю, заключается в отключении эффектов отскока полосы прокрутки (представлен в последней версии Flex 4.5 (для мобильных устройств) SDK).
Если я смогу отключить эффекты отскока, я предполагаю, что затем смогу добавлять / удалять элементы по мере необходимости в список, и он будет прокручиваться бесконечно.
Есть идеи?
Кришна
Ответ №1:
Лично для меня бесконечный список означал бы большую переработку основного компонента списка. Для обратного проектирования требуется много работы, и вы, вероятно, наткнетесь на стену. Я думаю, что вы хотите создать компонент с нуля и расширить его SkinnableContainer
.
С этого момента вам нужно решить, как реализовать и каково взаимодействие с пользователем для бесконечного списка, затем необходимо внедрить надлежащие методы и повторно использовать ваши средства визуализации элементов.
Комментарии:
1. Спасибо за повторный ответ на этот вопрос. Я знаю, что вы ответили в другом моем сообщении. Я разработал пользовательский компонент, который расширяется от SkinnableDataContainer и копирует большую часть кода прокрутки из реализации Flex scrollbar. Я заставил это работать, но мне нужно немного доработать. Возможно, я опубликую другой вопрос.
Ответ №2:
По моему опыту, вы можете просто реализовать отложенную загрузку компонента List, добавив событие изменения свойства в окно просмотра группы данных списка
list.dataGroup.addEventListener( PropertyChangeEvent.PROPERTY_CHANGE, onScrollPropertyChangeHandler );
Затем, в случае необходимости, прослушайте положение вертикальной прокрутки
if ( event.property == "verticalScrollPosition" ){
var listHeight:Number = itemList.height;
var curAnchorPoint:Number = event.newValue listHeight;
var bottomPositionToLoad:Number = 200; // Start loading when the list nearly reach the bottom minus 200
var anchorToLoadNextPage:Number = itemList.dataGroup.contentHeight - bottomPositionToLoad;
if(curAnchorPoint >= anchorToLoadNextPage){
loadNextPage();
}
}
При запуске loadNextPage () не забудьте удалить событие изменения свойства, чтобы loadNextPage не вызывался несколько раз.