Setting an effect when the items in a data provider change on a List control in Flex
The following example shows how you can add a data effect when the items in a data provider change in a Flex List control by setting the itemsChangeEffect effect style.
Full code after the jump.
<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/07/29/setting-an-effect-when-the-items-in-a-data-provider-change-on-a-list-control-in-flex/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white">
<mx:Script>
<![CDATA[
private function addItemToDataProvider():void {
var obj:Object = {label:new Date().toTimeString()};
var idx:int = Math.max(list.selectedIndex, 0);
list.scrollToIndex(idx);
arrColl.addItemAt(obj, idx);
}
private function removeItemFromDataProvider():void {
if (arrColl.length == 0) {
return;
}
var idx:int = Math.max(list.selectedIndex, 0);
list.scrollToIndex(idx);
arrColl.removeItemAt(idx);
}
]]>
</mx:Script>
<mx:ArrayCollection id="arrColl" />
<mx:DefaultListEffect id="defaultListEffect" />
<mx:ApplicationControlBar dock="true">
<mx:Button label="Add item"
click="addItemToDataProvider();" />
<mx:Button label="Delete item"
click="removeItemFromDataProvider();" />
</mx:ApplicationControlBar>
<mx:List id="list"
dataProvider="{arrColl}"
itemsChangeEffect="{defaultListEffect}"
variableRowHeight="true"
width="200" />
</mx:Application>
View source is enabled in the following example.
You can also set the itemsChangeEffect effect in an external .CSS file or <mx:Style /> block, as seen in the following snippet:
<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/07/29/setting-an-effect-when-the-items-in-a-data-provider-change-on-a-list-control-in-flex/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white">
<mx:Script>
<![CDATA[
private function addItemToDataProvider():void {
var obj:Object = {label:new Date().toTimeString()};
var idx:int = Math.max(list.selectedIndex, 0);
list.scrollToIndex(idx);
arrColl.addItemAt(obj, idx);
}
private function removeItemFromDataProvider():void {
if (arrColl.length == 0) {
return;
}
var idx:int = Math.max(list.selectedIndex, 0);
list.scrollToIndex(idx);
arrColl.removeItemAt(idx);
}
]]>
</mx:Script>
<mx:Style>
List {
itemsChangeEffect: ClassReference("mx.effects.DefaultTileListEffect");
}
</mx:Style>
<mx:ArrayCollection id="arrColl" />
<mx:ApplicationControlBar dock="true">
<mx:Button label="Add item"
click="addItemToDataProvider();" />
<mx:Button label="Delete item"
click="removeItemFromDataProvider();" />
</mx:ApplicationControlBar>
<mx:List id="list"
dataProvider="{arrColl}"
variableRowHeight="true"
width="200" />
</mx:Application>
Or, you can set the itemsChangeEffect effect using ActionScript, as seen in the following example:
<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/07/29/setting-an-effect-when-the-items-in-a-data-provider-change-on-a-list-control-in-flex/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white">
<mx:Script>
<![CDATA[
import mx.effects.DefaultListEffect;
private function init():void {
list.setStyle("itemsChangeEffect", DefaultListEffect);
}
private function addItemToDataProvider():void {
var obj:Object = {label:new Date().toTimeString()};
var idx:int = Math.max(list.selectedIndex, 0);
list.scrollToIndex(idx);
arrColl.addItemAt(obj, idx);
}
private function removeItemFromDataProvider():void {
if (arrColl.length == 0) {
return;
}
var idx:int = Math.max(list.selectedIndex, 0);
list.scrollToIndex(idx);
arrColl.removeItemAt(idx);
}
]]>
</mx:Script>
<mx:ArrayCollection id="arrColl" />
<mx:ApplicationControlBar dock="true">
<mx:Button label="Add item"
click="addItemToDataProvider();" />
<mx:Button label="Delete item"
click="removeItemFromDataProvider();" />
</mx:ApplicationControlBar>
<mx:List id="list"
dataProvider="{arrColl}"
variableRowHeight="true"
width="200"
initialize="init();" />
</mx:Application>
Peter deHaan
Peter deHaan currently works for Adobe on the Flex SDK QA team. While not working on Flex, Flash, and ColdFusion applications, Peter enjoys making up bios and writing in 3rd person. Peter's rarely updated blog can be found at blogs.adobe.com/pdehaan/, actionscriptexamples.com, airexamples.com, and coldfusionexamples.com.
-
Add Widgets (Content Sidebar)
This is your Content Sidebar. Edit this content that appears here in the widgets panel by adding or removing widgets in the Content Sidebar area.
12 Responses to Setting an effect when the items in a data provider change on a List control in Flex
Leave a Reply Cancel reply
-
Categories
- Accordion
- AccordionHeader
- ActionScript
- AddChild
- AdvancedDataGrid
- Alert
- alpha
- Animate
- AnimateProperties
- Application
- Application (Spark)
- ArrayCollection
- BarChart
- baseColor
- beta
- beta1
- beta2
- Bitmap
- Bitmap/BitmapData
- BitmapData
- BitmapFill
- BitmapFill (Spark)
- BitmapGraphic
- BitmapImage
- BitmapImage (Spark)
- BitmapImageResizeMode
- Border (Spark)
- BorderContainer (Spark)
- Box
- BuildInfo
- Button
- Button (Spark)
- ButtonBar
- ButtonBar (Spark)
- ByteArray
- Camera
- Charting
- CheckBox
- CheckBox (Spark)
- ClassFactory
- CollectionEvent
- Color
- ColorPicker
- ColorUtil
- ComboBox
- ComboBoxArrowSkin
- Compiler
- Component
- Component (Spark)
- Configuration
- Container
- ContextMenu
- ContextMenuEvent
- ContextMenuItem
- CSSCondition
- CSSSelector
- CSSStyleDeclaration
- CurrencyFormatter
- CursorManager
- Data Binding
- DataGrid
- DataGrid (Spark)
- DataGridColumn
- Date
- DateBase
- DateChooser
- DateField
- DateFormatter
- Debugging
- DefaultComplexItemRenderer
- DefaultTileListEffect
- DropDownList
- DropDownList (Spark)
- DropDownListButtonSkin
- DropDownListSkin
- DropShadowFilter
- E4X
- Effects
- Ellipse
- EmailValidator
- Embed
- Event
- Fade
- FileFilter
- FileReference
- fill
- Filters
- Flash
- Flash Integration
- FlashVars
- Flex 3 SDK
- Flex Builder
- Flex Builder 3
- Flex SDK
- Flex4
- FLVPlayback
- FocusManager
- FontLookup
- Fonts
- Form
- Form (Spark)
- FormHeading (Spark)
- FormItem
- FormItem (Spark)
- Forms
- FTETextField (Spark)
- FullScreen
- FullScreenEvent
- FxAnimateColor
- FxButtonBar
- FxCheckBox
- FXG
- FxHScrollBar
- FxHSlider
- FxList
- FxNumericStepper
- FxRadioButton
- FxRotate3D
- FxScroller
- FxTextArea
- FxTextInput
- FxToggleButton
- FxVScrollBar
- FxVSlider
- getStyleDeclaration()
- GradientEntry
- Graphic (Spark)
- HBox
- HDividedBox
- HGroup (Spark)
- HorizontalLayout
- HorizontalList
- HSBColor (Spark)
- HScrollBar (Spark)
- HSlider
- HSlider (Spark)
- HTML template
- ID3Info
- Image
- Image (Spark)
- ImageSnapshot
- itemRenderer
- JointStyle
- Label
- Label (Spark)
- Legend
- LegendItem
- LigatureLevel
- Line
- LinearGradientStroke
- LineScaleMode
- LinkBar
- LinkButton
- List
- List (Spark)
- Menu
- MenuBar
- Metadata
- MetadataEvent
- Model
- Mouse
- MouseCursor
- MouseEvent
- Move
- Namespace
- NavigatorContent (Spark)
- needsSWF
- NetConnection
- NetStream
- Nightly Builds
- NumberBaseRoundType
- NumberFormatter
- NumberValidator
- NumericCompare
- NumericStepper
- NumericStepper (Spark)
- ObjectProxy
- ObjectUtil
- paddingLeft
- paddingRight
- Panel
- Panel (Spark)
- Parallel
- Path
- PieChart
- PieSeries
- PieSeriesItem
- PopUpAnchor (Spark)
- PopUpButton
- PopUpManager
- ProgrammaticSkin
- ProgressBar
- PropertyChangeEvent
- QName
- RadialGradient
- RadioButton
- RadioButton (Spark)
- RadioButtonGroup
- RadioButtonGroup (Spark)
- Rect
- RegExp
- Regular Expressions
- Repeater
- RichEditableText
- RichText
- RichText (Spark)
- RichTextEditor
- Rotate
- Rotate3D (Spark)
- Scroller (Spark)
- Sequence
- setStyle()
- SimpleText
- SimpleText (Spark)
- skinClass
- Slider
- SliderEvent
- SolidColor
- SolidColorStroke
- Sort
- SortField
- Sound
- SoundEffect
- Spinner (Spark)
- SpriteVisualElement (Spark)
- StageDisplayState
- States
- StringUtil
- StringValidator
- StyleManager
- Styles
- SWFLoader
- SWFObject
- System
- SystemManager
- TabBar
- TabBar (Spark)
- TabNavigator
- TabStopFormat
- Text
- Text Layout Framework (TLF)
- TextArea
- TextArea (Spark)
- TextBox
- TextConverter
- TextEvent
- TextFlow
- TextFlowUtil
- TextFormat
- TextGraphic
- TextInput
- TextInput (Spark)
- TextLayoutFormat
- TextView
- Themes
- TileLayout
- TileList
- TileOrientation
- Timer
- TitleWindow
- TitleWindow (Spark)
- TLF
- ToggleButton (Spark)
- ToggleButtonBar
- ToolTip
- Transition
- Tree
- TruncationOptions
- UIComponent
- UIFTETextField
- Updater
- URLLoader
- URLRequest
- URLUtil
- URLVariables
- ValidationResultEvent
- Validator
- Validators
- VBox
- VDividedBox
- Vector
- VerticalLayout
- VerticalLayout (Spark)
- VGroup (Spark)
- Video
- VideoDisplay
- VideoElement
- VideoElement (Spark)
- VideoEvent
- VideoPlayer (Spark)
- VideoPlayerScrubBar
- ViewStack
- VScrollBar (Spark)
- VSlider
- VSlider (Spark)
- XML
- XMLList
- XMLListCollection
- ZipCodeValidator
- ZipCodeValidatorDomainType
- Zoom
-
Articles
- December 2010
- November 2010
- October 2010
- September 2010
- August 2010
- July 2010
- June 2010
- May 2010
- April 2010
- March 2010
- February 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
- January 2009
- December 2008
- November 2008
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- July 2007
-
Meta


Peter,
Thanks so much for this post! I’ve been trying to use this effect with a list containing custom item renderers and it seems to perform and animate rather poorly. Do you know if the DefaultListEffect component accounts for renderers that don’t have an explicit height or has variableRowHeight set? Maybe it wasn’t meant for that and just fixed height renderers? Either way thanks!
thanks man, didn’t realize it was that simple!
Hi I searched alot but couldn’t find any clue , As I understand I cant use this itemsChangeEffect
on datagrid so what else can I use instead.
This is perfect – and so simple.
However, there’s one small detail that I find annoying. In my application, I have rows that are quite tall (about 80 pixels or so), and when the “delete” animation moves everything up, there is a small jump up at the very end. It makes the animation feel clunky.
I noticed it is the same in your demo but your rows are not that tall so it’s not as noticeable – but still there.
Is this something that can be fixed? I tried suspendbackgroundprocessing to see if that would help but no luck.
Andrew.
Thank you for this post. It seems to have all the elements that may lead to my answer:
I have a flex list small enough to displays one item at a time and this list contains 12 items. I want to get rid of the scroll, and have the list switch display whenever calendar months are scrolled, however, initially, this list should display the item relative to the current month.
I will use whatever help I can get. Please.
Thank you.
@Emmanuel,
I’m not sure I understand your question, but if you’re trying to create a List that only displays 1 item at a time and doesn’t display a vertical scroll bar, this should get you started:
Peter
@Peter
Hello Peter,
Thank you very much for your assistance, it’s been incredible, I have found the my answer in both of your versions. Again, thank you! you’ve been terrific.
Thanks.
Emmanuel
Or, if you’re trying to update a List when the DateChooser changes it’s displayed month, you could try something like this:
Peter
Hi Peter,
It looks like this property disappeared in Flex 4. Do you have a way to do this with a spark list?
Thanks.
@Brian,
I don’t believe that this currently is supported by the Spark List control. I suggest filing a bug/enhancement at http://bugs.adobe.com/flex/ and having 20 of your closest friends vote on it. (Post the bug number here and I’ll vote!)
Peter
I have added a comment to an existing bug (see link below). I am not sure if it will reactivate the bug or not. If you know it doesnt, let me know for I can post a new bug/enhancement.
https://bugs.adobe.com/jira/browse/SDK-15034
Nice one, the itemsChangedEffect example for Actionscript also works with TileList.
Thanks
Brian