There are no additional interfaces, but as my blog points out, your renderer must be completely data-driven and get its visual state from calls to isItemSelected/Highlighted as renderers are recycled so the cannot retain state
________________________________ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of icepaco33 Sent: Tuesday, November 13, 2007 5:34 AM To: [email protected] Subject: [flexcoders] Re: Can't select an item renderer in a list Humble excuse Alex, but you are not answering my question / problem. I have no problem with my highlight / selection showing... My problem is that if I do drag & drop operation and if I change the Data Provider then sometimes I can no longer select some items even tho they are showing... I have found out that if I remove my Highlighter class from my renderer then everything will work out fine (I can drag & drop and then select any / every items in the list). So I was wondering if it is because my Highlighter class isn't implementing some Interface that are necessary for a sub component of a Renderer... Thanx ! --- In [email protected] <mailto:flexcoders%40yahoogroups.com> , "Alex Harui" <[EMAIL PROTECTED]> wrote: > > The Flex classes draw highlight and selection behind the renderer, so > any renderer with an opaque background will obscure it. Folks either > test for isItemSelected/Highlighted and change their own background > color, or remove the background color. You can see examples on my blog > (blogs.adobe.com/aharui > > > > ________________________________ > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> ] On > Behalf Of icepaco33 > Sent: Monday, November 12, 2007 9:22 PM > To: [email protected] <mailto:flexcoders%40yahoogroups.com> > Subject: [flexcoders] Re: Can't select an item renderer in a list > > > > Salutations, > I have found out the culprit. > So first here is the code of the renderer : > > <?xml version="1.0" encoding="utf-8"?> > <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> > <http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> > " width="100%" > styleName="myStyle1" verticalScrollPolicy="off" > implements="mx.managers.IFocusManagerComponent" toolTip="{data.uid}" > creationComplete="SentenceRendererCreationCompleteEventHandler()"> > <mx:states> > <mx:State name="BeingPlayed"> > <mx:SetStyle target="{txtSentence}" name="color" value="#ff0000"/> > </mx:State> > <mx:State name="Selected"> > <mx:SetProperty target="{txtSentence}" name="condenseWhite" > value="false"/> > <mx:SetEventHandler name="currentStateChange"> > > <mx:handler>SentenceRendererSelectedCurrentStateChangeEventHandler()</mx > :handler> > </mx:SetEventHandler> > </mx:State> > <mx:State name="HasBeenPlayed"> > <mx:SetStyle target="{txtSentence}" name="color" value="#808080"/> > <mx:SetStyle name="themeColor"/> > </mx:State> > </mx:states> > <mx:Style source="Ressources/Librairie/USlicFont.css"/> > <mx:TextArea id="txtSentence" wordWrap="true" width="90%" > borderStyle="none" text="{data.Text}" textIndent="25" > styleName="myStyle1" textDecoration="none" selectable="false" > verticalScrollPolicy="off" minHeight="60"> > </mx:TextArea> > <mx:Button id="btnSentence" width="25" label="S{data.indexNo}" > height="15" color="#ffffff"> > > <mx:downSkin>@Embed('Ressources/Librairie/History/Btn_S_D.swf')</mx:down > Skin> > > <mx:overSkin>@Embed('Ressources/Librairie/History/Btn_S_U.swf')</mx:over > Skin> > > <mx:upSkin>@Embed('Ressources/Librairie/History/Btn_S_U.swf')</mx:upSkin > > > </mx:Button> > <mx:Script> > <![CDATA[ > import text.Highlighter; > private var _Highlighter:Highlighter; > private var _strDefaultState:String = "non"; > > override public function set data(value:Object):void > { > super.data = value; > if(this.currentState == "Selected") > { > _Highlighter.reset(); > _Highlighter.highlightText(); > } > } > public function BeingPlayed():void > { > //Change the text color > _strDefaultState = currentState; > _Highlighter.reset(); > this.currentState = "BeingPlayed"; > } > public function HasBeenPlayed():void > { > //Change the text color > _Highlighter.reset(); > this.currentState = "HasBeenPlayed"; > } > public function HasBeenSelected():void > { > this.currentState = "Selected"; > } > public function ResetRenderer():void > { > if(_strDefaultState != "non") > { > _Highlighter.reset(); > currentState=_strDefaultState; > _strDefaultState = "non"; > } > } > public function BackToDefault():void > { > _Highlighter.reset(); > currentState = ""; > } > private function getTextField(component:TextArea):TextField{ > var len:int = component.numChildren; > var r:TextField = new TextField(); > for(var i:int=0; i<len; i++){ > var thisChild:DisplayObject = component.getChildAt(i); > if(thisChild is TextField){ > var textChild:TextField = thisChild as TextField; > r = textChild; > } > } > return r; > } > private function > SentenceRendererSelectedCurrentStateChangeEventHandler():void > { > _Highlighter.highlightText(); > } > > private function SentenceRendererCreationCompleteEventHandler():void > { > _Highlighter = new Highlighter(getTextField(txtSentence),0xfffcee21); > } > > ]]> > </mx:Script> > </mx:Canvas> > > The problem resides in the sub components Highlighter. This component > draws a rectangle in the back of the text. (This is someone else's lib > that I modified a bit) > > Anyway if I don't refer to this sub class at all then my application > works fine. > > I believe I have to implements some Interface from Flex so that I can > use this sub class in my Renderer... > > Thanx for the help > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > , "Alex Harui" <aharui@> wrote: > > > > The UID's in the data, not the renderer matter. Renderers definitely > > get recycled so you can't store anything about selection in the > renderer > > and have to use isItemSelected to update it during updateDisplayList. > > > > > > > > If you want to post a mini-example, we can take a look. > > > > > > > > ________________________________ > > > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > ] On > > Behalf Of icepaco33 > > Sent: Sunday, November 11, 2007 4:04 PM > > To: [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > > Subject: [flexcoders] Re: Can't select an item renderer in a list > > > > > > > > No I do not have the same problem if I use the default renderer. > > I checked the UIDs in the following manner : > > > > - Manually changing the UID of each renderer to make sure they are > > unique > > > > - Using debug mode and monitoring the UID : they are different. > > > > In both cases tho the behavior of this bug is exactly the same : > > > > Behavior of the list during a drag and drop is to create 2 new > renderer: > > > > 1 that represent the item being dragged which will never make it to > > the list. (So that new item doesn't cause the bug) > > 1 that will take the place of the item that you dragged but will > > contain the info of the item next to it. > > > > That last item for whatever reason will be considerer by the list's > > selection model as the last item in the list. > > > > So while you can still see the other items in the list you can no > > longer rollover / select them. > > > > If I repopulate the list by changing the list's dataProvider then for > > some reason the list will use the renderer's already there but in > > reverse order. That means that the first item is selectable but none > > of the following items will be.(Unless the new list is longer than the > > old one which means that all the new items which will require new > > renderers will then be selectable) > > > > Hope this help clarify ! > > > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > , "Alex Harui" <aharui@> wrote: > > > > > > Double check the UIDs. Try using the default renderer and see if you > > > still have the problem. > > > > > > > > > > > > ________________________________ > > > > > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > ] On > > > Behalf Of icepaco33 > > > Sent: Sunday, November 11, 2007 5:52 AM > > > To: [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > > Subject: [flexcoders] Can't select an item renderer in a list > > > > > > > > > > > > Greetings everybody, > > > I have a peculiar problem. I have a list that is rendered by a > custom > > > item renderer. The list allows multiple selection and also drag and > > > drop operation (in order to shuffle the item around) > > > > > > However when I move an item further down the list (drag & drop) then > I > > > can't select the items that are below the item immediately following > > > the item I moved. > > > > > > Also if I change the content of my data provider, I will experience > > > the same thing (can't select the items except the first one) > > > > > > I found out something very interesting : > > > It seems that my list doesn't allow me to select items which the > > > renderer is older (has been instanciated before) the previous > > renderer. > > > > > > Allow me to demonstrate : > > > If I have the following renderers : > > > > > > Renderer1 > > > Renderer2 > > > Renderer5 > > > Renderer3 > > > Renderer4 > > > > > > And assuming the number after 'renderer' indicates the order into > > > which the renderer have been instanciated in my list then in the > above > > > situation I will not be able to select or rollover Renderer3 and > > > Renderer4... > > > > > > This I believe is the problem that happens when I do a drag & drop > > > operation and or when I reload my list by changing the > DataProvider... > > > > > > N.B. : I use only 1 class for my renderer so all renderers are of > the > > > same type. I have also checked their UID and they seem to be > distinct > > > as far as I can tell... > > > > > > Hope you guys can help cuz this is really bothering me... > > > > > > Thanx for your attention ! > > > > > > paco > > > > > >

