Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Кеширование картинок в таблицах [Flex] (http://www.flasher.ru/forum/showthread.php?t=166860)

F10 06.09.2011 13:00

Кеширование картинок в таблицах [Flex]
 
Создаю спарк таблицу, под один столбец создаю ItemRenerer.
В этом ItemRenderer-е показываю иконку (BitmapData) этой строки.

Все работает, кроме одного странного эффекта: при первой прокрутке вниз таблицы (таблица довольно большая) все картинки каждой строки показывает нормально..Но при прокрутки обратно уже показывает одинаковые картинки (т.е. кеширует где-то картинки, которые отображаются в видимой части таблицы, и показывает только их даже для других строк, при прокрутке туда-обратно)...

Как-то можно заставить показывать иконки нормально?

alatar 06.09.2011 15:49

У вас ItemRenderer корявый.

F10 06.09.2011 18:23

Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
                                        xmlns:s="library://ns.adobe.com/flex/spark"
                                        xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">
 
        <fx:Script>
                <![CDATA[
                        [Bindable]
                        private var _bitmapData:BitmapData;
 
                        override public function prepare(hasBeenRecycled:Boolean):void
                        {
                                if(data != null && _bitmapData == null)
                                {
                                        _bitmapData = data.bitmapData as BitmapData;
                                }
                        }
 
                ]]>
        </fx:Script>
 
        <s:Image source="{_bitmapData}" maxWidth="60" maxHeight="30"/>
 
</s:GridItemRenderer>

Добавлено через 22 минуты
Решил:
Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
                                        xmlns:s="library://ns.adobe.com/flex/spark"
                                        xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">
 
        <s:Image source="{data.bitmapData}" maxWidth="60" maxHeight="30"/>
 
</s:GridItemRenderer>


alatar 06.09.2011 19:02

Ошибка у вас в условии. ItemRenderer'ы используются повторно и при втором заходе _bitmapData != null, там данные предыдущей картинки.

Нафига там вообще байндинг?
Вы используете скинирование для Image? Если нет, то используйте BitmapImage

Код:

<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
                                        xmlns:s="library://ns.adobe.com/flex/spark"
                                        xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">
 
        <fx:Script>
                <![CDATA[
                        private var _data:Object;

                        override public function set data(value:Object):void
                        {
                                if (_data == value)
                                        return;

                                super.data = value;
                                _data = value;

                                if(_data != null && _data.bitmapData != null && _data.bitmapData !== image.source)
                                {
                                        image.source = data.bitmapData as BitmapData;
                                }
                        }
                ]]>
        </fx:Script>
 
        <s:BitmapImage id="image" maxWidth="60" maxHeight="30"/>
 
</s:GridItemRenderer>


F10 06.09.2011 19:06

Спасибо..Теперь понял..


Часовой пояс GMT +4, время: 07:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.