Cómo detener ListView para "saltar" cuando se cambia el modelo
Lo que necesito hacer: Necesito crear unventana de chat usando unListView
en QML que almacena los mensajes de chat. lo puselistView.positionViewAtEnd()
para seguir los últimos mensajes. DeshabilitopositionViewAtEnd
cuando me desplazo hacia arriba para poder leer los mensajes pasados sin saltar al final cada vez que recibo un nuevo mensaje.
El problema: Después de desplazarse hacia arriba, cada vezRecibo un nuevo mensaje que salta Al principio de la lista. Para resolver eso me las arreglo paraalmacenar elcontentY
de la lista y restablecerlo cada vezonCountChanged
controlador se llama (ver el código a continuación):
ListView {
id: messagesList
model: contact? contact.messages: []
delegate: delegate
anchors.fill: parent
anchors.bottomMargin: 20
height: parent.height
anchors.margins: 10
property int currentContentY
onMovementEnded: {
currentContentY = contentY
}
onCountChanged: {
contentY = currentContentY
}
onContentYChanged: {
console.log(".....contentY: " + contentY)
}
}
El problema es que aunque configuré el últimocontentY
Tenía, antes de cambiar el modelo, ella lista todavía salta un poco (varios píxeles, no al final o al principio) yno siempre salta. Y cuando voy al principio de la lista e imprimo elcontentY
Obtengo valores negativos. TeóricamentecontentY
al principio de la lista debe ser0
.
¿Alguien puede decirme qué está yendo mal? ¿O tal vez sugiera otra solución para crear mi lista de mensajes?
Que de antemano! :)