移动行时 ListView contentY 发生变化

Posted

技术标签:

【中文标题】移动行时 ListView contentY 发生变化【英文标题】:ListView contentY changes when rows are moved 【发布时间】:2015-09-23 14:18:02 【问题描述】:

我有一个 ListView 分为两个部分:收藏夹和常规项目,其中一个模型继承了 QAbstractItemModel。模型中的项目被排序,以便收藏在常规项目之前,当一个项目被标记为收藏时,它被移动到基础列表中的适当位置。

这是模型中执行移动的代码:

if (beginMoveRows(QModelIndex(), position, position, QModelIndex(), newPosition)) 
    items.removeAt(position);
    items.insert(newPosition + (newPosition < position ? 0 : -1), item);
    endMoveRows();

但是,每次移动发生时,ListView 的contentY 都会更改为-delegate.height(在本例中为-120px)。唯一可见的变化是滚动条偏移并最终退出屏幕。

发生了什么,我该如何解决?

编辑:我发现只有当 ListView 完全滚动到底部时才会发生这种情况。

【问题讨论】:

【参考方案1】:

这是问题的间接解决方案。由于唯一重要的症状是滚动条发生偏移,因此我必须找到另一个值来设置滚动条的y 属性:ListView.visibleArea.yPosition

这是整个绑定:

Binding 
    target: handle
    property: "y"
    value: (flickable.height - handle.height - 25) * flickable.visibleArea.yPosition / (1 - flickable.visibleArea.heightRatio)

解释:

flickable.height - handle.height - 这是滚动条手柄顶部移动的高度部分 25 - 我自己的具体偏移量,与他人无关 flickable.visibleArea.yPosition / (1 - flickable.visibleArea.heightRatio) - 这个整数是从 0% 到 100% 的百分比,从滚动条的最高位置到最低位置(最高 y

更多关于ListView.visibleArea.yPosition

【讨论】:

以上是关于移动行时 ListView contentY 发生变化的主要内容,如果未能解决你的问题,请参考以下文章

Android 上的 Xamarin.Forms ListView OutOfMemoryError 异常

如何在 jQuery 移动列表视图中切换复选框

在C#中的Listview控件中,当鼠标悬浮在某列或者当选中某行时怎么显示图片??

如何在 QML 中处理来自父 Flickable 的 gridview contentY 和 Y 位置

动画正在进行时无法与 UITableView 交互

Android学习总结(十三) ———— ListView 简单用法