Гибкий:место переключения изображений в списке листов

StackOverflow https://stackoverflow.com/questions/1627396

Вопрос

Я столкнулся со странной проблемой с itemRenderers внутри TileList.

Вот рабочий пример без ItemRenderer:152.org/flex/

Вот сломанная версия с ItemRenderer:152.org/brokenExample/
(У меня нет представителя, чтобы сделать оба из них ссылкой)

В обоих примерах включен параметр "Просмотр источника".

Чтобы увидеть проблему, воспользуйтесь сломанным примером, выберите альбом и прокрутите вниз на одну строку.Прокрутите назад вверх, и изображения будут переключены.Если вы попробуете это на рабочем примере, все будет в порядке.

Кажется, это широко известная ошибка, но я не могу найти для нее решения.

Обновить
Я снова начал играть с этим примером и выяснил кое-что еще.Оказывается, вам не нужно переопределять средство установки данных.Вы можете создать новый метод в ItemRenderer, который устанавливается всякий раз, когда плитка хочет обновиться.Таким образом, хитрость заключается в том, чтобы не полагаться на методы initialize или creationComplete.

Это то, что у меня есть для ItemRenderer в приложении.

<itemRenderers:ImageTile img="{data}"/>

Это код, который у меня есть в ItemRenderer .

public function set img(value:String) : void {
  trace("setting source: " + value);
  this.source = value;
  this.name = value.toString().split("/").pop().split(".").shift();
}

Я обновил свой пример отразить это изменение.

Это было полезно?

Решение

У меня нет вашего приложения под рукой, поэтому я не могу протестировать его полностью, но я просмотрел ваш исходный код.Вероятно, вам нужно переопределить данные установщик в вашем ItemRenderer:

<?xml version="1.0" encoding="utf-8"?>
<mx:Image xmlns:mx="http://www.adobe.com/2006/mxml" initialize="init()">

 <mx:Script>
  <![CDATA[

   override public function set data(value:Object):void
   {
    super.data = value;
    this.source = data;
    this.name = data.toString().split("/").pop().split(".").shift();
   }

   private function init() : void {
    // Removed from your source and transplanted above
   }

  ]]>
 </mx:Script>

</mx:Image>

Flex попытается повторно использовать средства визуализации элементов в списках (что означает события жизненного цикла, которые вы, возможно, ожидаете - initialize, creationComplete и т.д.-- не всегда срабатывает), поэтому, если вы хотите быть уверены, что ваше средство визуализации обновляется при изменении элемента данных (как это происходит при возникновении событий прокрутки), лучше всего переопределить свойство data средства визуализации.Скорее всего, это устранит проблему.

Другие советы

Может быть, попробовать сделать недействительным creationComplete?

Из того, что я помню с сетками данных (которые работают несколько аналогично списку листов), когда элемент попадает в фокус, он воссоздается заново.

<mx:itemRenderer>
  <mx:Image id="myImage" creationComplete="myImage.invalidate()" />
</mx:itemRenderer>

Еще не пробовал этот код, но я думаю, что это то, с чего вы хотите начать поиск.Я взглянул на ваш компонент ItemRenderer.Попробуйте creationComplete вместо инициализации для вызова вашей функции

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top