Wie stoppe ich ListView für "Jumping", wenn das Modell geändert wird?
Was ich tun mus: Ich muss ein @ erstellchat window Verwendung einerListView
in QML, in der die Chat-Nachrichten gespeichert sind. Ich setzelistView.positionViewAtEnd()
, um den letzten Nachrichten zu folgen. Ich deaktivierepositionViewAtEnd
Wenn ich nach oben scrolle, um die letzten Nachrichten zu lesen, ohne jedes Mal, wenn ich eine neue Nachricht erhalte, am Ende zu springen.
Das Proble: Nach dem Scrollen jedes MalIch erhalte eine neue Nachricht, es springt am Anfang der Liste. Um das zu lösen schaffe ich es zustore thecontentY
der Liste und setze sie jedes Mal zurückonCountChanged
handler heißt (siehe Code unten):
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)
}
}
Das Problem ist, dass obwohl ich das letzte @ gesetzt hacontentY
Ich hatte, bevor das Modell geändert wurde, dielist springt noch ein bisschen ( mehrere Pixel, nicht am Ende oder am Anfang) undes springt nicht immer. Und wenn ich an den Anfang der Liste gehe und das @ druccontentY
Ich erhalte negative Werte. Theoretisch istcontentY
am Anfang der Liste sollte @ se0
.
Kann mir jemand sagen, was falsch läuft? Oder schlagen Sie eine andere Lösung vor, um meine Nachrichtenliste zu erstellen?
Than Sie im Voraus! :)