How to set currentIndex of ListView to value other than 0 at start?
-
I have a ListView that lives inside a Component that is loaded / unloaded per demand. However the value selected by the user on the ListView is to be remembered so that the same value is selected when User visits next time. Below is a complete snippet that mimics my scenario.
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")QtObject { id: internal property int contactIndex: 0 property bool listLoaded: false } Button { id: button anchors.horizontalCenter: parent.horizontalCenter text: (!internal.listLoaded) ? "Show List" : "Hide List" onClicked: { loader.sourceComponent = (!internal.listLoaded) ? listViewComponent : undefined internal.listLoaded = !internal.listLoaded } } Loader { id: loader anchors.centerIn: parent onStatusChanged: if (loader.status == Loader.Ready) { console.log("read current-index:", internal.contactIndex) loader.item.model = contact1 loader.item.currentIndex = internal.contactIndex } } Connections { target: loader.item onItemClicked: { internal.contactIndex = currentIndex console.log("saved current-index:", internal.contactIndex) } } Contacts { id: contact1 } Component { id: listViewComponent ListView { id: listView width: 180; height: 200 currentIndex: -1 signal itemClicked(var currentIndex) model: undefined delegate: Text { id: text text: name + ": " + number color: ListView.isCurrentItem ? "red" : "black" MouseArea { anchors.fill: parent onClicked: { text.ListView.view.currentIndex = index itemClicked(index) } } } onCurrentIndexChanged: { console.log(listView, "current index changed to", currentIndex) // Some other operations need to go in here... } } }
}
Contacts.qml is following:
import QtQuick 2.0
ListModel {
ListElement {
name: "Bill Smith"
number: "555 3264"
}
ListElement {
name: "John Brown"
number: "555 8426"
}
ListElement {
name: "Sam Wise"
number: "555 0473"
}
}The problem is that as soon as the model is set, the currentIndex of ListView is automatically set to 0. Is there a way to prevent currentIndex of ListView from being automatically set to 0 when model is assigned?