Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.02.2007, 17:57
__i вне форума Посмотреть профиль Отправить личное сообщение для __i Найти все сообщения от __i
  № 11  
Ответить с цитированием
__i
 
Аватар для __i

Регистрация: Jan 2004
Адрес: Украина, Харьков
Сообщений: 1,524
Отправить сообщение для __i с помощью ICQ
шаманство айтем рендеров это особый раздел флекса..., вобщем в глубине всего этого конкретный экземпляр айтем рендера ни как особо не связан с конкретным элементом (далее "элемент") в дата провайдере. Вернее его связывает свойство айтем рендера(далее "айтем рендер" ))) ) "data" (ну или типа того). Но эта связь очень легко рвущаяся и заменяемая :

В жизни листовые компонеты создают количество айтем рендеров которое помещаеться в видимую область + 1-2 чтобы сделать иллюзию непрерывной прокрутки (ну или если количество элементов помещаеться в сам компонет, то количество айтем рендеров равно ему скролл не отображается). Теперь при прокрутке происходит этакая "карусель", когда айтем рендер скрывается вверху(внизу) то его просто перекидывают вниз (вверх) и меняют ему поле data. Выглядит это гдето так:

1
2 <- первый видимый
3
4
5
6 <- последний видимый

после скрола(проскролили на 2 пункта) получаеться:
5
6 <- первый видимый
1
2
3
4 <- последний видимый

Вполне вероятно (в твоем случае), создав 10 атем рендеров, при уменьшении размера листа, лист просто не ремувит лишние атем рендеры, а держит их "прозапас" (утверждать не буду, но как вариант, вполне вероятно это глупость я сказал).

Но все в конце концов сводиться к следующему при перестройке листа, лист просто выстраивает свои айтем рендеры как нужно и присваивает им соответствующие положению данные data. Тут вполне вероятно просиходит следующия ситуация. При этом присваивании айтем рендер просто думает что ему "досталась" старые данные и ничего не делает. Инвалидейты/валидейты ему пофигу (он выровнял себя как нужно, покрасил станлартные вещи и забил на остальное). Поэтому тебе нужно переопределить несколько методов у твоего айтем рендера, какие конкретно я тебе не скажу, но вполне вероятно это метод получения данных (setData вроде или data его тебе 100% нужно переопределить) вполне вероятно тот метод который "слушает" изменения внутри элемента(данных) , ну и какие-то методы которые отвечают за отрисовку твоего айтем рендера (скорей всего это будет тотже validate*|invalidate* и в нем ты просто будешь задавать соответствующий стиль ).

Ну и пару слов про секс.
Все кастомные айтем рендеры которые приведены в примерах в виде мхмл это ОТСТОЙ. Они только для красоты и ничего более. Какой-то более менние продвинутый функционал на них построить довольно сложно

Усе типа рассказал, когда выросту может даже напишу умную статью ).
__________________
33 коровы


Последний раз редактировалось __i; 09.02.2007 в 18:00.
Старый 09.02.2007, 18:06
__i вне форума Посмотреть профиль Отправить личное сообщение для __i Найти все сообщения от __i
  № 12  
Ответить с цитированием
__i
 
Аватар для __i

Регистрация: Jan 2004
Адрес: Украина, Харьков
Сообщений: 1,524
Отправить сообщение для __i с помощью ICQ
Цитата:
Сообщение от __i
[вырезано много лишних слов из прошлой статьи]
В кратце Нирт дал те самое правильное решение, вернее ссылку на него
( http://flasher.ru/forum/showpost.php...98&postcount=5 ) ну разве что нужно убрать апдейтдисплей лист! т.к. они зачем-то все время перерисовывают замечательный айтем. Его нужно заменить на что то более оптимальное
__________________
33 коровы


Последний раз редактировалось __i; 09.02.2007 в 18:09.
Старый 09.02.2007, 18:47
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 13  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
__i прав, тебе нужно переопределять itemRenderer.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^


Последний раз редактировалось 7thsky™; 10.02.2007 в 02:23.
Старый 10.02.2007, 02:24
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 14  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: Jun 2005
Сообщений: 636
Согласен, и айтем рендер должен реализовывать mx.controls.listClasses.IDropInListItemRenderer
тогда будет у элемента {get | set} listData ():BaseListData, где в BaseListData есть и rowIndex и columnIndex

собственно Nirth дал самое оптимальное решение


Последний раз редактировалось 7thsky™; 10.02.2007 в 02:41.
Старый 10.02.2007, 03:24
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 15  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
А вроде каждый второй компонент (Label\CheckBox и тд) реализуют IDropInLitItemRenderer.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 10.02.2007, 10:16
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 16  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: Jun 2005
Сообщений: 636
Сanvas не реализует например

Старый 14.02.2007, 13:04
baron27 вне форума Посмотреть профиль Отправить личное сообщение для baron27 Посетить домашнюю страницу baron27 Найти все сообщения от baron27
  № 17  
Ответить с цитированием
baron27
Контрибьютор базы знаний по Флекс
 
Аватар для baron27

Регистрация: Aug 2005
Сообщений: 690
нормальное решение:
http://www.mikenimer.com/index.cfm/2...Grid-component
__________________
Flex 2 и Co

Старый 15.02.2007, 15:30
OlenKa вне форума Посмотреть профиль Отправить личное сообщение для OlenKa Найти все сообщения от OlenKa
  № 18  
Ответить с цитированием
OlenKa

Регистрация: Jul 2006
Сообщений: 38
У меня возник вопрос, а как можно поменять цвет строки уже во время работы? например после какого-то действия пользователя?

Старый 16.02.2007, 10:50
baron27 вне форума Посмотреть профиль Отправить личное сообщение для baron27 Посетить домашнюю страницу baron27 Найти все сообщения от baron27
  № 19  
Ответить с цитированием
baron27
Контрибьютор базы знаний по Флекс
 
Аватар для baron27

Регистрация: Aug 2005
Сообщений: 690
Цитата:
Сообщение от OlenKa
У меня возник вопрос, а как можно поменять цвет строки уже во время работы? например после какого-то действия пользователя?
В данном случае - только, если на действия пользователя изменять соответствующим образом датапровайдер.
__________________
Flex 2 и Co

Старый 21.04.2008, 11:53
max_oil вне форума Посмотреть профиль Отправить личное сообщение для max_oil Найти все сообщения от max_oil
  № 20  
Ответить с цитированием
max_oil

Регистрация: Mar 2008
Сообщений: 57
Цитата:
Сообщение от baron27 Посмотреть сообщение
Но вот в чем затык: например, датапровайдера хватает на 10 рядов и 10 ряд у нас красный, а теперь, если датапровайдер изменяется до 5 элементов, то эти пять элементов перекрашиваются правильно, а старый 10 ряд так и остается красным. Пробовал всякие там invalidate'ы - не помогает.
У меня похожая проблема, сначала все отоброжается нормально, но потом когда я меняю датапровайдер, цвета отображаются старые..
пробовал переопределять listData, как советовал 7thsky™, таким способом - не помогает.
Код:
    private var _listData:BaseListData;
    
    [Bindable("dataChange")]

    public function get listData():BaseListData
    {
      return _listData;
    }
    
    public function set listData(value:BaseListData):void
    {
      _listData = value;
    }
Во Флексе я новичок, наверно что-то не то вобще делаю.. Подскажите пожалуйста, что делать надо?


Последний раз редактировалось max_oil; 21.04.2008 в 11:56.
Создать новую тему Ответ Часовой пояс GMT +4, время: 01:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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