Hah, Tim, your spell didn't quite do it, huh? ;)  Container-based renderers
are problematic.  For anything even slightly complex, extend UIComponent.

 

I copy ListItemRenderer, it is a great starting point.  It is pretty easy to
see where to add your special incantations.

 

Tracy Spratt,

Lariat Services, development services available

  _____  

From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On
Behalf Of Tim Hoff
Sent: Saturday, April 18, 2009 5:27 PM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Re: Custom List ItemRenderer / Recycling troubles
(height incorrect)

 







Hi,

Yes, after playing with it a little, you're correct; my suggestion only
works in AS. Sorry, I always extend UIComponent for itemRenderers that
need to have a variableRowHeight.

BTW, in the future, please sign your posts; so that we can put a name to
your warm and positive comments.

-TH

--- In flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com> ups.com,
"wubac1" <wub...@...> wrote:
>
> Tim, I have been using the variableRowHeight (see my original
example). Also, one should not need to replicate the measure of mx:Text.
Your example disregards internal padding elements of the Text component.
I did try setActualSize combined with getExplicitOrMeasuredHeight, but
that only works in ActionScript. I encourage you to try and create a
functional example. I'm fairly confident at this point that you will not
get one working in MXML with mx:Text (multi-line).
>
> I was able to get a fully functional item renderer based on
ListItemRenderer, which uses UITextField. However, in theory, one should
be able to do it in MXML. With that in mind, I replaced the UITextField
of my ActionScript-based renderer with mx:Text. It's probably not
surprising to many that the renderer no longer behaves as expected. The
height issue appears to be tied to the component in some fashion
(mx:Text in this case). I'd file a defect but I haven't seen much ROI in
such reports.
>
> --- In flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com> ups.com,
"Tim Hoff" TimHoff@ wrote:
> >
> >
> > Hi,
> >
> > Set the List's variableRowHeight="true" and use something like this
in
> > the itemRenderer:
> >
> > override protected function measure():void
> > {
> > var textLineMetrics:TextLineMetrics = comment.measureText(
> > comment.text );
> >
> > // should add paddingTop, paddingBottom and verticalGap to this too
> > measuredHeight = textLineMetrics.height + myLinkButton.height;
> > }
> >
> > -TH
> >
> > --- In flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com>
ups.com, "Tracy Spratt" <tracy@> wrote:
> > >
> > > Sorry, no magic sauce here. I had some pixie dust somewhere, but.
Was
> > it
> > > Asimov or Clark that said, "Any sufficiently advanced technology
is
> > > indistinguishable from magic"?
> > >
> > >
> > >
> > > When I needed a variable height renderer, I copied
ListItemRenderer
> > and
> > > modified to my needs. That was the only way I could get it to
work. It
> > is
> > > also *much* more performant than a container based renderer. The
magic
> > is
> > > indeed in the measure() function.
> > >
> > >
> > >
> > > If you do not have a lot of items to renderer, Repeater works well
> > with
> > > variable heights.
> > >
> > >
> > >
> > > Tracy Spratt,
> > >
> > > Lariat Services, development services available
> > >
> > > _____
> > >
> > > From: flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com>
ups.com
[mailto:flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com> ups.com]
> > On
> > > Behalf Of wubac1
> > > Sent: Saturday, April 18, 2009 2:02 AM
> > > To: flexcod...@yahoogro <mailto:flexcoders%40yahoogroups.com> ups.com
> > > Subject: [flexcoders] Custom List ItemRenderer / Recycling
troubles
> > (height
> > > incorrect)
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > I'm attempting to create a very simple item renderer for mx:List.
I've
> > found
> > > that when the dataProvider is static, there are no problems with
the
> > custom
> > > item
> > > renderer. However, when the dataProvider is dynamic, the height of
the
> > item
> > > renderer is not correct (and scroll bars appear for each renderer
with
> > any
> > > meaningful # of rows). I've set variableRowHeight="true" for the
List.
> > I've
> > > also tried overriding the measure function and invaliding the size
> > when a
> > > dataChange event is dispatched (based on information provided on
> > FlexCoders
> > > in previous discussions along these lines).
> > >
> > > CommentRenderer.mxml:
> > >
> > > <?xml version="1.0" encoding="utf-8"?>
> > > <mx:VBox xmlns:mx="http://www.adobe.
<http://www.adobe. <http://www.adobe.com/2006/mxml> com/2006/mxml>
> > > com/2006/mxml" width="100%">
> > > <mx:Script>
> > > <![CDATA[
> > > override protected function measure():void
> > > {
> > > super.measure();
> > > measuredHeight = comment.textHeight;
> > > }
> > > ]]>
> > > </mx:Script>
> > > <mx:LinkButton label="{data.commenter.name}"/>
> > > <mx:Text id="comment" width="100%" text="{data.comment}"
> > > dataChange="invalidateSize()"/>
> > > </mx:VBox>
> > >
> > > The mx:List definition:
> > >
> > > <mx:List id="comments" itemRenderer="com.test.CommentRenderer"
> > width="100%"
> > > height="100%"/>
> > >
> > > I've looked over the ListItemRenderer, but have so far been unable
to
> > glean
> > > the
> > > magic sauce that makes the item renderer function correctly when
the
> > control
> > > recycles. Can someone explain / provide a functional example(s)
with
> > mx:Text
> > > (ActionScript and MXML examples preferred, for completeness)?
> > >
> >
>



Reply via email to