> > 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 <aha...@adobe.com> 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:* flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] *On > Behalf Of *Baz > *Sent:* Monday, October 05, 2009 3:18 PM > *To:* flexcoders@yahoogroups.com > *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 <aha...@adobe.com> 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:* flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] *On > Behalf Of *Baz > *Sent:* Monday, October 05, 2009 12:32 PM > *To:* flexcoders@yahoogroups.com > *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() > > > > >