Como parar o ListView para "pular" quando o modelo é alterado
O que eu preciso fazer: Preciso criar umjanela de bate-papo usando umListView
na QML que armazena as mensagens de bate-papo. eu colocolistView.positionViewAtEnd()
para seguir as últimas mensagens. DesabilitopositionViewAtEnd
quando rolar para cima, para poder ler as mensagens passadas sem pular no final toda vez que receber uma nova mensagem.
O problema: Depois de rolar para cima, sempreRecebo uma nova mensagem que salta no início da lista. Para resolver isso eu consigoguarde ocontentY
da lista e redefina sempreonCountChanged
manipulador é chamado (veja o código abaixo):
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)
}
}
O problema é que, embora eu tenha definido o últimocontentY
Antes de mudar o modelo, eu tinha olista ainda pula um pouco (vários pixels, não no final ou no começo) enem sempre pula. E quando eu vou para o topo da lista e imprimo ocontentY
Eu recebo valores negativos. Teoricamente,contentY
no início da lista deve ser0
.
Alguém pode me dizer o que está errado? Ou talvez sugira outra solução para criar minha lista de mensagens?
Do que você com antecedência! :)