在 Flex/AIR 中使用拖放对火花列表中的项目重新排序



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

与工作的测试应用程序和我的真实应用程序的区别在于,实际应用程序上的布局更复杂(我使用的是 ViewStack 和 Groups)和 dataProvider。在所有情况下,我都使用 ArrayCollection,但在实际应用程序中,我有一些 SearchResults 对象(这些不是动态对象)。

拖动动画在那里,但在拖放时,会选择鼠标下的项目。如果我不设置 dragMoveEnabled,那么该项目会以某种方式被复制,但在它的位置我看到一个对象。

工作示例

<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"/>

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

我通过调试列表的删除处理程序发现了问题。该问题是由数据提供程序具有排序集的事实引起的,如果您已对用于创建数据提供程序的 ArrayCollection 或数组进行了排序,则忽略 dragMove。

第二个问题是我的数组是通过从 sqlite 数据库中读取获得的,我没有在代码或 SQL 查询中对其设置排序,因此排序对我来说是出乎意料的。

最新更新