1

データ モデルからのアイテムの削除をアニメーション化しようとすると、アイテムが削除されますが、使用しているアニメーションがアイテムの寸法を 0 に設定しているため、データ モデルに追加される次のアイテムが表示されません。それを表示するには、データ モデル全体を再読み込みするか、アプリを閉じて再度開く必要があります。アニメーションを行わないと、アイテムが正しく削除および追加されますが、達成しようとしている効果は得られません。私のサンプルコードは次のとおりです。

ListView {
dataModel: GroupDataModel {
    id: noteDataModel
}

listItemComponents: [
            ListItemComponent {
                type: "item"
                StandardListItem {
                    id: noteItem
                    title: ListItemData.noteTitle
                    description: ListItemData.noteText 
                    animations: [
                        ScaleTransition {
                            id: deleteAnimation
                            toY: 0
                            toX: 0
                            duration: 500
                            onEnded: {          
                              noteItem.ListItem.view.dataModel.remove(noteItem.ListItem.view.dataModel.data(noteItem.ListItem.indexPath));
                            }
                        }
                    ]
                contextActions: [
                        ActionSet {
                            DeleteActionItem {
                                onTriggered: {
                                    deleteAnimation.play();
                                }
                            }
                        }
                    ]
}
4

1 に答える 1

3

この問題が発生する理由は、Cascades フレームワークがパフォーマンス向上のためにオブジェクトを再利用することがあるためです。データ モデルからアイテムを削除し、そのディメンションを 0 に設定すると、そのオブジェクトは、ディメンション プロパティが 0 に設定された状態で、しばらくの間メモリに保持されます。次に追加するアイテムでは、削除されたアイテム オブジェクトが再利用されますが、ディメンションは使用されます。 0 であるため、表示されません。

これを解決するには、アニメーションの onEnded イベントを変更し、削除後に項目を 1.0 のサイズに再スケーリングします。

onEnded: {
     noteItem.ListItem.view.dataModel.remove(noteItem.ListItem.view.dataModel.data(noteItem.ListItem.indexPath));
     noteItem.scaleX = 1.0;
     noteItem.scaleY = 1.0;
}
于 2013-11-02T12:40:24.357 に答える