I figured it out.  The problem was due to the fact that I had a bind tag
set on the ArrayCollection getter that is updated whenever a
CollectionChange occurs.

I will post a more complete question next time.  Thanks to Tim and Tracy
for trying to help.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
layout="absolute"
     applicationComplete="init()">
     <mx:Label id="label1" text="{albumsThumbnailList.selectedIndex}" 
x="10" y="12"/>
     <mx:Label id="label2" text="{presentedAlbumIndex}"  x="10" y="38"/>
     <mx:TileList id="albumsThumbnailList" direction="vertical"
         dataProvider="{presentedAlbums}"
         selectedIndex="{presentedAlbumIndex}"  x="160" y="10"
         change="presentedAlbumIndex=albumsThumbnailList.selectedIndex"
         height="400"/>
     <mx:Button click="test()"  x="29" y="136"/>

     <mx:Script>
         <![CDATA[
             import mx.events.CollectionEvent;
             import mx.collections.ArrayCollection;
             private var _includedAlbums:ArrayCollection =
                 new
ArrayCollection(["zero","one","two","three","four","five","six","seven"]\
);

             [Bindable]
             private var presentedAlbumIndex:int = -1;

             private function init():void {
                
_includedAlbums.addEventListener(CollectionEvent.COLLECTION_CHANGE,
                     function():void {
                         dispatchEvent(new Event("albumDataChanged"));
                     }
                 );
             }

             private function test():void {
                 _includedAlbums.removeItemAt(1);
                 presentedAlbumIndex--;
             }

             [Bindable(event="albumDataChanged")]
             private function get presentedAlbums():ArrayCollection {
                 return _includedAlbums;
             }

         ]]>
     </mx:Script>

</mx:Application>


--- In [email protected], "steve horvath" <flexcod...@...>
wrote:
>
> My apologies.  I really didn't mean to come across as brash.  I
realize you are trying to help and I do appreciate it.
>
> Let me put together a small app and I'll post it here.
>
> Steve
>
> --- In [email protected], "Tim Hoff" TimHoff@ wrote:
> >
> >
> > Yes, _includedAlbums.selectedItem should have been
> > albumsThumbnailList.selectedItem.  And no, the code below is not
> > sufficient to reproduce the problem.  For instance, where is
> > presentations.currentPresentation.presentedAlbumIndex defined?  If
you
> > want someone's help here, make it easy for them to copy and paste a
> > small Application for testing.
> >
> > Besides that, excuse the hell out of me.  Go ahead and continue to
look
> > at it for hours.
> >
> > -TH
> >
> > --- In [email protected], "steve horvath" <flexcoders@>
> > wrote:
> > >
> > >
> > > The code below is sufficient to reproduce the problem.
> > >
> > > _includedAlbums is an ArrayCollection, so no .selectedItem
property on
> > > that. In any case, I am already happily setting the
> > presentedAlbumIndex
> > > by other means. It's the TileList selectedIndex that I need to
update
> > > properly.
> > >
> > > --- In [email protected], "Tim Hoff" TimHoff@ wrote:
> > > >
> > > >
> > > > Not sure what to tell you without having a sample application to
> > play
> > > > with. But, you could try some brute force techniques, like:
> > > >
> > > > _includedAlbums.removeItemAt(1);
> > > > presentations.currentPresentation.presentedAlbumIndex =
> > > > _includedAlbums.getItemIndex(_includedAlbums.selectedItem);
> > > >
> > > > -TH
> > > >
> > > > --- In [email protected], "steve horvath" flexcoders@
> > > > wrote:
> > > > >
> > > > >
> > > > > I've been looking at this for hours. Does anyone know why I am
> > > seeing
> > > > > this behavior? Or at least tell me how I can debug to provide
more
> > > > > information.
> > > > >
> > > > >
> > > > > --- In [email protected], "steve horvath" flexcoders@
> > > > > wrote:
> > > > > >
> > > > > >
> > > > > > I have a TileList:
> > > > > >
> > > > > > <mx:Label id="label1"
text="{albumsThumbnailList.selectedIndex}"
> > > />
> > > > > > <mx:Label id="label2"
> > > > > >
text="{presentations.currentPresentation.presentedAlbumIndex}"
> > />
> > > > > > <mx:TileList id="albumsThumbnailList" backgroundAlpha="0"
> > > > > > useRollOver="false" initialize="mySizeBinding(event);"
> > > > > >
> > > > >
dataProvider="{presentations.currentPresentation.presentedAlbums}"
> > > > > > itemRenderer="PresentationAlbumRenderer"
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
selectedIndex="{presentations.currentPresentation.presentedAlbumIndex}"
> > > > > > change="albumChangeHandler()" />
> > > > > >
> > > > > > public function test():void {
> > > > > > _includedAlbums.removeItemAt(1);
> > > > > > dispatchEvent(new Event("albumToggledEvent"));
> > > > > > presentedAlbumIndex--;
> > > > > > }
> > > > > >
> > > > > > BEFORE test():
> > > > > > label1 == 5
> > > > > > label2 == 5
> > > > > >
> > > > > > AFTER test():
> > > > > > label1 == 5
> > > > > > label2 == 4
> > > > > >
> > > > > > Problem is, when the 5th index is currently selected and I
> > delete
> > > an
> > > > > > item earlier in the list (like index 2), the data provider
> > updates
> > > > the
> > > > > > list. But the selectedIndex doesn't get updated. (See test()
> > > > > > function.) I noticed when I comment out the removeItemAt
line,
> > the
> > > > > > index gets updated just fine.
> > > > > >
> > > > > > How do I update the data provider and index in the same
> > operation
> > > > and
> > > > > > get the TileList to bind correctly? Can I perhaps subclass
> > > TileList
> > > > > and
> > > > > > override a function? Some other way?
> > > > > >
> > > > > > I tried looking into the internals of ListBase, inspecting
> > > > > > selectedIndex, and generally browsing around at runtime. I
> > noticed
> > > > > that
> > > > > > selectedIndex does get set to 4 momentarily. Then it gets
set
> > > right
> > > > > > back to 5 again. I'm guessing it may have to do with the
> > > > > > updateDisplayList or something like that.
> > > > > >
> > > > >
> > > >
> > >
> >
>


Reply via email to