Мое решение этой проблемы было нацелено на конкретную ситуацию, но у нее есть преимущество, заключающееся в том, что она очень проста, поэтому, возможно, вы сможете извлечь из нее то, что соответствует вашим потребностям. Так как я не знаю точно, какую проблему вы пытаетесь решить, я дам вам мое описание:
У меня был список, который постепенно загружал данные с сервера. Когда пользователь прокручивает страницу вниз и следующая группа элементов будет добавлена в поставщик данных, положение прокрутки вернется к началу.
Решить эту проблему было так же просто, как остановить распространение события COLLECTION_CHANGE, чтобы List его не перехватил.
myDataProvider.addEventListener(
CollectionEvent.COLLECTION_CHANGE, preventRefresh
);
private function preventRefresh(event:CollectionEvent):void {
event.stopImmediatePropagation();
}
Вы должны знать, что это эффективно предотвращает перерисовку компонента List, поэтому любые добавленные элементы не будут отображаться. Это не было проблемой для меня, так как элементы будут добавлены в конец списка (вне области просмотра), и когда пользователь будет прокручивать, список будет автоматически перерисован, и новые элементы будут отображаться. Возможно, в вашей ситуации вы можете вызвать перерисовку в случае необходимости.
Когда все элементы были загружены, я мог затем удалить прослушиватель событий и вернуться к нормальному поведению компонента List.