I'm not sure what you mean by "entire collection reloads".  What 
collectionChange events are being dispatched (what is the .kind property on the 
event).   I don' t see anything drastic in the code for REPLACE, but REFRESH or 
RESET might be a problem.  However those shouldn't be dispatched on setItemAt

Alex Harui
Flex SDK Developer
Adobe Systems Inc.<http://www.adobe.com/>
Blog: http://blogs.adobe.com/aharui

From: [email protected] [mailto:[email protected]] On Behalf 
Of Baz
Sent: Tuesday, October 06, 2009 11:26 AM
To: [email protected]
Subject: Re: [flexcoders] custom itemrender flicker


You might be better off suppressing the setItemAt if it is the same.

That is exactly what I did and it works great. Now the only issue I need to 
solve is how the entire collection reloads if only one item is changed. Do you 
have any advice on where I should begin looking for that? I am very comfortable 
extending and overriding anything.

Thanks alot!


On Mon, Oct 5, 2009 at 10:36 PM, Alex Harui 
<[email protected]<mailto:[email protected]>> wrote:


It depends on how you coded the renderer.  Our list classes have very general 
and somewhat inefficient update strategies because we want to make sure most 
collection updates renderer correctly.  I haven't looked at how Spark List 
thinks, but mx:List will refresh all renderers even if only one item changes 
because it doesn't know if another renderer might have "look-ahead" and also 
care about the item even though its data item is some other item in the 
collection.



You might be better off suppressing the setItemAt if it is the same.



Alex Harui

Flex SDK Developer

Adobe Systems Inc.<http://www.adobe.com/>

Blog: http://blogs.adobe.com/aharui



From: [email protected]<mailto:[email protected]> 
[mailto:[email protected]<mailto:[email protected]>] On 
Behalf Of Baz
Sent: Monday, October 05, 2009 3:18 PM
To: [email protected]<mailto:[email protected]>
Subject: Re: [flexcoders] custom itemrender flicker





Hey Alex, thanks a lot for your reply. So it is *proper* behaviour that if you 
setItemAt in a custom itemrenderer that the whole control is rebuilt visually? 
Incidentally I am using Flex 4, so this might be of even more interest.

I have a SkinnableDataContainer with an ArrayCollection dataprovider that holds 
custom objects ('reports' in this case).

If my current collection has:

 1.  Report #1 = Name: 1stReportName, Path: 1stReportPath
 2.  Report #2 = Name: 2ndReportName, Path: 2ndReportPath

And then I do a myArrayCollection.setItemAt(Report1, 0), which basically sets 
the first item to the same report it currently has. The itemrenderer empties of 
all items, then re-displays them, causing a flicker or flash that is noticeable 
on a slow computer.

Wouldn't it make more sense for the itemrender NOT to re-build itself from 
scratch on every change? What if you had 100 items and u onl;y set one item?

Thanks a lot!

Baz




On Mon, Oct 5, 2009 at 3:05 PM, Alex Harui 
<[email protected]<mailto:[email protected]>> wrote:



It depends on how you wrote the renderer.  You can try overriding the "function 
set data()" to check for changes to the object referenced by the renderer, but 
then if some sub-property changes, the renderer will not update.



Might be better to understand why it flickers when updating.



Alex Harui

Flex SDK Developer

Adobe Systems Inc.<http://www.adobe.com/>

Blog: http://blogs.adobe.com/aharui



From: [email protected]<mailto:[email protected]> 
[mailto:[email protected]<mailto:[email protected]>] On 
Behalf Of Baz
Sent: Monday, October 05, 2009 12:32 PM
To: [email protected]<mailto:[email protected]>
Subject: [flexcoders] custom itemrender flicker





If I have a custom item render based on an ArrayCollection with 10 times, and 
just for fun, I loop through those 10 items and setItemAt the exact same values 
that are already there - on screen the list of items reloads in a sense, 
re-building itself to the exact same values. I would like that in such a case, 
the on-screen controls know that they are the same as before and not to rebuild 
themselves. Is this possible? Can I intercept some event to double check 
whether they are the same or different?

The goal of course, is to have this behaviour even if one some items changed. 
For example if I change only the 10th item, I would expect only the 10th item 
to refresh, no the whole collection.

Thanks for any ideas!

P.S. I am not useing refresh() on the ArrayCollection is it set to auto-update. 
Also, all my setItemAt calls are done in commitProperties()




Reply via email to