![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2005
Сообщений: 1,155
|
Назрел такой вопрос.
Имею DataGrid с несколькими column содржащими изображения. Пользуюсь для этого классами OneCellRenderer, TwoCellRenderer и т. д подобного вида package {
import fl.containers.UILoader;
import fl.controls.listClasses.ICellRenderer;
import fl.controls.listClasses.ListData;
import fl.core.InvalidationType;
import fl.data.DataProvider;
import flash.events.Event;
public class OneCellRenderer extends UILoader implements ICellRenderer {
protected var _data:Object;
protected var _listData:ListData;
protected var _selected:Boolean;
public function OneCellRenderer():void {
super();
}
public function get data():Object {
return _data;
}
public function set data(value:Object):void {
_data = value;
source = _data.bitmap;
trace("воспроизводим изображение 1");
}
public function get listData():ListData {
return _listData;
}
public function set listData(value:ListData):void {
_listData = value;
invalidate(InvalidationType.DATA);
invalidate(InvalidationType.STATE);
}
public function get selected():Boolean {
return _selected;
}
public function set selected(value:Boolean):void {
_selected = value;
invalidate(InvalidationType.STATE);
}
}
}
Теперь самое интересное. При перерисовке таблицы (допустим в случае добавления новой строки, прокрутке, выделения строки) должна происходить следуещая вещь - вызов метода invalidate для изменяемой строки с последующим вызовом метода set data в каждом классе CellRenderer'а. В моем случае я должен увидеть дважды по трейсу ("воспроизводим изображение 1" и ("воспроизводим изображение 2" (см. выше в коде) Но не тут то было! Событие invalidate произойдет для ВСЕХ ячеек второго столбца, т.е. для второго класса вызов set data будет повторяться для каждой строки, а не только для перерисовываемой! Если строк много это заметно затормозит флешку. Вопрос. Как мне поступить, что бы события перерисовки (иначе говоря вызов set data для каждого класса) происходил единожды Вот тут исходник, если что http://***********/1802406 (320Кб, CS3) Последний раз редактировалось flash33; 14.03.2008 в 06:16. |
|
|||||
|
А почему перерисовываются ячейки только второго столбца?
И не по теме: у вас тоже иногда обрауется "зазор" между столбцами? Как с этим бороться
__________________
Сам себе репортер |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 1,155
|
Вообще то должны перерисовываться только ячейки в определенной строке. К примеру, по вызову метода DataProvider.invalidateItemA(index) перерисовываться должны ячейки в index строке. Так и происходит для первого столбца. Второй столбец перерисовывается полностью
Я конечно могу отследить какая именно строка перерисовывается в данный момент и отсечь ненужное, но это не гут. |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:47. |
|
|
« Предыдущая тема | Следующая тема » |
|
|