使用Flex / AIR中的拖放重新排序spark列表中的项目

时间:2012-05-01 16:17:22

标签: flex air

我有一个工作正常的简单测试示例,我将拖放属性设置为true,如下所示:<s:List dragMoveEnabled="true" dragEnabled="true" dropEnabled="true">

与可用的测试应用程序和我的真实应用程序的不同之处在于真实应用程序上的布局更复杂(我正在使用ViewStacks和Groups)和dataProvider。在所有情况下我都使用ArrayCollection,但在真实的应用程序中,我有一些SearchResults对象(这些不是动态对象)。

拖动动画就在那里但是当放弃时,会选择鼠标下的项目。 如果我没有设置dragMoveEnabled,那么该项目会以某种方式复制,但在其位置我会看到一个Object。

//工作示例

<s:List dragMoveEnabled="true" dragEnabled="true" dropEnabled="true">
        <s:dataProvider>
            <s:ArrayCollection>
                <fx:Object label="Item 1" data="1" />
                <fx:Object label="Item 2" data="2" />
                <fx:Object label="Item 3" data="3" />
            </s:ArrayCollection>
        </s:dataProvider>
    </s:List>

这来自我的申请,但无效

<s:List id="favSavedSearchesList" width="100%" height="100%"  
        contentBackgroundColor="#dfe4ea"  
        change="favSavedSearchesList_changeHandler(event)"
        itemRenderer="generic_components.RemoveItemRenderer"
        dragMoveEnabled="true" dragEnabled="true" dropEnabled="true"/>

更新: 我做了一些测试并用一个字符串的ArrayCollection替换了我的dataProvider并且它工作了,所以我现在可以排除应用程序的复杂布局并查看提供程序

1 个答案:

答案 0 :(得分:1)

我通过调试List的drop handler找到了问题。问题是由dataProvider有排序集引起的,如果你已经对ArrayCollection或用于创建dataProvider的Array进行了排序,那么将忽略dragMove。

第二个问题是我的数组是通过读取sqlite数据库获得的,我没有在代码或SQL查询中对它进行排序,所以排序对我来说意外。