Feathers(基于Starling的Adobe AIR库)List控件在第二次实例化时不起作用

时间:2013-03-05 08:58:36

标签: actionscript-3 air adobe starling-framework

我遇到了羽毛列表控件的问题。它在我第一次进入包含列表的屏幕时工作,但是第二次我在同一个应用程序执行中进入该屏幕时,滚动列表根本不滚动,加上文本不会出现。控制台中没有出现错误。

我尝试了很多东西,但我仍然遇到同样的问题:它只在第一次实例化时才有效。如果我退出屏幕并返回,它根本不起作用!

当退出屏幕时,它被处理掉了,当回到那个屏幕时,它是一个新的List实例。为什么它只是第一次起作用?

另外,我尝试根本不使用自定义ItemRenderer,因此只显示图像,没有文本,但仍然会发生相同的情况。该列表不响应第二次实例化的滚动事件。所以这不是ItemRenderer的问题。

好的,这是一些代码:

        typeList = new List();
        typeList.x = Settings.appResolution[0] - Settings.menuTypeColumnWidth;
        typeList.y = Settings.topBarHeight;
        typeList.width = Settings.menuTypeColumnWidth;
        typeList.height = Settings.appResolution[1] - Settings.topBarHeight;
        typeList.dataProvider = new ListCollection(listContents);
        typeList.itemRendererProperties['labelField'] = 'text';
        typeList.itemRendererProperties['accessoryLabelField'] = 'articles';
        typeList.itemRendererProperties['iconSourceField'] = 'thumbnail';
        var listLayout:VerticalLayout = new VerticalLayout();
        listLayout.gap = Settings.menuTypeItemGap;
        typeList.layout = listLayout;
        typeList.addEventListener(Event.CHANGE, onListChange);
        typeList.itemRendererType = MenuTypeItemRenderer;

正如你所看到的,没有什么不同寻常的。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在执行第二次实例化时,您确定列表使用的ListCollection仍然可用吗?

_list.dataProvider = new ListCollection(items);

答案 1 :(得分:0)

这是我用过的代码示例。看看它是否提供任何线索。在从阶段中删除类之前,我调用clearList函数。

private function onAddedToStage(e:starling.events.Event):void {

removeEventListener(starling.events.Event.ADDED_TO_STAGE, onAddedToStage);
addEventListener(starling.events.Event.REMOVED_FROM_STAGE, onRemovedFromStage);


//only do this if a list does not already exist.
if(!_list){

items = new <ListItem>[];
for(var i:int = 0; i < 20; i++) {
items.push(new ListItem("Item text"));
}

_list = new List();
_list.itemRendererFactory = function():IListItemRenderer {
renderer = new ListItemRenderer();  
// pass your skins in here
renderer.defaultSkin = new Image(AssetManager.getAtlas().getTexture("listItemClear_normal"));
renderer.defaultSelectedSkin = new Image(AssetManager.getAtlas().getTexture("listItemClear_selected"));
return renderer;
};

vl = new VerticalLayout();  
vl.hasVariableItemDimensions = false;
_list.layout = vl;                      
_list.scrollerProperties.snapScrollPositionsToPixels = true;
_list.scrollerProperties.verticalScrollPolicy = Scroller.SCROLL_POLICY_AUTO;
_list.scrollerProperties.horizontalScrollPolicy = Scroller.SCROLL_POLICY_OFF;
_list.scrollerProperties.scrollBarDisplayMode = Scroller.SCROLL_BAR_DISPLAY_MODE_FLOAT;

//need to use a factory as we are not using a theme
_list.scrollerProperties.verticalScrollBarFactory = myScrollBarFactoryFunction;

_list.isSelectable = false;
_list.scrollerProperties.hasElasticEdges = true;
_list.itemRendererProperties.height = 60r;

_list.addEventListener(starling.events.Event.CHANGE, list_changeHandler);
_list.width = 320;
_list.height = StartUp._stageHeight;

addChild(_list);

_list.dataProvider = new ListCollection(items);
}
}



public function myScrollBarFactoryFunction():IScrollBar {

scrollBar = new SimpleScrollBar();
scrollBar.direction = SimpleScrollBar.DIRECTION_VERTICAL;
scrollBar.thumbProperties.defaultSkin = new Scale3Image(new Scale3Textures(AssetManager.getAtlas().getTexture("vertical-scroll-bar-thumb-skin"), 5, 14, Scale3Textures.DIRECTION_VERTICAL));      
scrollBar.thumbProperties.width = 4;
scrollBar.thumbProperties.minHeight = 20;
scrollBar.width = 4;
return scrollBar;

}


public function clearList():void {

if (_list) {
scrollBar = null;           
renderer = null;
vl = null;
removeChild(_list);     
_list = null;   

items.length = 0;
items = null;
}
}