To expand on Peter's response:

Like Peter said, you create all the elements you need when the item renderer is 
first created. If you don't want to show a button, set the visibility to false 
and depending on how you are laying them out, you might need to set the size to 
0 as well. That way you can simulate them being added and removed and have 
things reflow properly. You'll have to set gap to 0 and you might need to play 
around with spacers as well for this to work.

HTH,
Harbs

On Sep 3, 2013, at 4:40 PM, Peter Ent wrote:

> Each time the itemRenderer's data is set, you are wiping out all of the
> button in the TileGroup and re-creating them. That's a source of your slow
> scrolling performance.
> 
> As nice-and-easy as your approach is, it is better to add some more code
> complexity and re-use those buttons.
> 
> Here's one example: you could, for each itemRenderer, have a cache of
> previously created buttons, which would be empty the first time the
> itemRenderer was used. If you need 10 buttons but have less than 10 (e.g.,
> 0 the first time), "use" the buttons (explained below) you have previously
> created and create the remaining, being sure to also put references to
> them into your cache.
> 
> If you have more buttons in your cache than you need, "use" the amount you
> need and "deactivate" the ones you don't. That is, if you have 20 buttons
> in the cache but only need 8, you'll deactivate the remaining 12.
> 
> So "use" means to set a button's visible and includeInLayout properties to
> true. "Deactivate" means to set a button's visible and includeInLayout
> properties to false.
> 
> I think an approach like this would have better performance for you. If
> you can avoid setting includeInLayout, it will be even better since all
> you will be doing is hiding/showing the buttons, but the itemRenederers
> might not look right if you also don't remove them from the layout.
> 
> Peter Ent
> Flex SDK Team
> Adobe Systems
> 
> On 9/3/13 9:29 AM, "Federico De Maddalena" <f.demaddal...@patente.it>
> wrote:
> 
>> Hi Ben
>> I'm developing a mobile project, not desktop!
>> Images in use are very small.
>> Usevirtuallayout is set on true.
>> The code is here: 
>> 
>>      <fx:Script>
>>              <![CDATA[
>>                      import spark.components.Button;
>>                      import spark.core.ContentCache;
>>                      
>>                      import events.SchedaEvent;
>>                      
>>                      static public const s_imageCache:ContentCache=new 
>> ContentCache();
>>                      
>>                      override public function set data(value:Object):void
>>                      {
>>                              super.data=value;
>>                              lezione.text=value.titolo;
>>                              img.source="img/lez/"+value.lezione+"g.png";
>>                                      
>>                              schede.removeAllElements();
>>                              for(var i:int=0; i<value.schede.length; i++)
>>                              {
>>                                      var button:Button=new Button();
>>                                      button.label=String(i+1);
>>                                      button.id=value.schede[i];
>>                                      button.height=40;
>>                                      button.width=40;
>>                                      
>> button.addEventListener(MouseEvent.CLICK, handleMouseClick);
>>                                      schede.addElement(button);
>>                              }       
>>                      }
>>                      
>>                      private function handleMouseClick(event:MouseEvent):void
>>                      {
>>                              sendEvent(parseInt(event.currentTarget.id));
>>                      }
>>                      
>>                      private function sendEvent(id:int):void
>>                      {
>>                              var e:SchedaEvent=new 
>> SchedaEvent(SchedaEvent.LOAD_SCHEDA);
>>                              e.Id=id;
>>                              
>>                              this.owner.dispatchEvent(e);
>>                      }
>>              ]]>
>>      </fx:Script>
>>      
>>      <s:HGroup width="100%" height="100%" paddingTop="3">
>>              <s:VGroup height="100%" width="20%" verticalAlign="top"
>> horizontalAlign="center">
>>                      <s:Image width="80%" height="80%" id="img"
>> contentLoader="{s_imageCache}"/>
>>              </s:VGroup>
>>              <s:VGroup height="100%" width="70%">
>>                      <s:Label width="100%" height="20%" id="lezione"/>
>>                      <s:TileGroup width="100%" height="80%" id="schede"/>
>>              </s:VGroup>
>>              
>>      </s:HGroup> 
>> 
>> -----Messaggio originale-----
>> Da: Ben Smeets [mailto:b...@okapion.com]
>> Inviato: martedì 3 settembre 2013 15.22
>> A: users@flex.apache.org
>> Oggetto: Re: Improve spark List performance
>> 
>> How many rows in the list? (i.c.w. useVirtualLayout)
>> 
>> The setup you mention shouldn't be a problem I think (unless the image
>> you talk about is 200MB a pop), but depends on the implementation
>> (details). E.g., if the buttons are created every scroll, instead of
>> reused, that might be a cause.
>> 
>> Any code you can share, can help (me at least) to track down the culprit.
>> 
>> Not a guru here though, so maybe others will know off the top of their
>> heads :)
>> 
>> Ben
>> 
>> P.S. We are talking desktop app here right? Mobile is a different beast
>> all together (for me).
>> 
>> 
>> 
>> On 3 sep. 2013, at 15:16, Federico De Maddalena
>> <f.demaddal...@patente.it> wrote:
>> 
>>> Hi! I'm working on a mobile project.
>>> I created a spark List, which item renderer is an extension of
>>> ItemRenderer. Each of my item renderer contains one spark Image, one
>>> Label and a number of small buttons which varies from 3 to 20.
>>> Now, scrolling the list is terribly slow. There are ways to improve
>>> scroll speed? I spent a lot of time but without success.
>>> Regards
>>> federico
>>> 
>> 
> 

Reply via email to