3

我正在尝试使用 beginMoveRows / endMoveRows 使持久性索引保持不变,但有时扩展的状态标志/持久性索引会重复,它们不应该存在。

有相当多的代码,所以我将完成我认为我告诉机器要做的事情:

有一个方法, sortChildrenOf(item) 可以完成所有的魔法。

  • 从 item 中查找子项并以每个子项作为参数调用 sortChildrenOf
  • 保存旧订单
  • 快速排序儿童
  • 找出旧秩序和新秩序的差异
  • 对于每个差异:
  • 移动行
  • 应用更改
  • endMoveRows

当有 2 个级别时,一切都运行良好,但是当我输入“长”数据树时,持久索引会损坏。

树中的数据是从网络更新的,但实际更新是在 gui 线程中完成的。

是否有一些我应该做的确切顺序?我可能忘记继承一些导致这种情况的方法吗?

我已经实现了这些方法: - 数据 - 标志 - getItem - 索引 - 父级 - setData

编辑:忘了提,我在主要的 sortChildrenOf 调用之前和之后得到了发出 layoutAboutToBeChanged 和发出 layoutChanged 。

4

1 回答 1

2

我让它工作,但不是 beginMoveRows 和 endMoveRows。我使用发出 layoutAboutToChange 的旧系统获取持久索引列表来操作它并使用 changePersistentIndexList 将其设置回来,最后发出布局更改。

由于这是修复程序,因此我相信 beginMoveRows、endMoveRows 和具有树类型数据的持久索引存在一些错误。

询问您是否需要更好的代码示例。

于 2013-08-06T10:32:33.613 回答