Решением может быть обтекание ListView
внешним Flickable
, который будет отвечать за прокрутку.
Это решение не требует ручного сброса предыдущего ListView
contentY
, поскольку положение прокрутки больше не зависит от самого ListView
.
Вот основной рабочий пример:
Button {
id: button
text: 'change model'
onClicked: view.aModel = !view.aModel
}
Flickable {
anchors.top: button.bottom
width: parent.width
height: 100
interactive: true // the scroll will be managed by this external Flickable
contentHeight: view.contentHeight
clip: true
ListView {
id: view
property bool aModel: true
anchors.fill: parent
interactive: false // deactivate scroll on the internal Flickable
model: aModel
? ["a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a"]
: ["b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b"]
delegate: Text {
width: parent.width
height: 20
text: modelData + index
}
}
}