使用qml的blackberry级联中的Listview刷新问题
我的应用程序中有4个页面,顺序是main.qml、login.qml、home.qml和profile.qml。home.qml有一个列表视图,其中列出了一些可以在profile.qml中修改的数据。因此,每当我从profile.qml返回home.qml时,我都需要刷新我的listview。我的main.qml有导航窗格,因此我编写了代码来刷新main.qml上的listview,它确实调用home.qml中的reloadview函数。我的问题是,如果用户第一次登录,那么导航堆栈的所有页面都[main.qml,login.qml,home.qml,profile.qml],当我从profile.qml弹出时,会调用重载函数,但home.qml上不会发生listview刷新。但是,如果已经登录的用户登录,那么此时导航堆栈具有页面[main.qml,home.qml,profile.qml],当我从profile.qml弹出时,将调用重载函数,并且listview也会正确刷新所以我想如果login.qml存在于堆栈中,那么从main.qml刷新listview可能会出现一些问题,但如果不存在,则可以正常工作。你知道我该怎么解决这个问题吗?或者,在我从login.qml推送到home.qml之后,是否可以从堆栈中删除login.qml?我尝试弹出login.qml,然后再推,但弹出会导致main.qml显示,直到它被推回到home.qml。非常感谢您的建议 下面是我的qmls的示例结构 main.qml loginpage.qml 编辑 homepage.qml(已修改) //在重载视图中调用“获取我的联系人”函数使用qml的blackberry级联中的Listview刷新问题,listview,blackberry,qml,blackberry-10,blackberry-cascades,Listview,Blackberry,Qml,Blackberry 10,Blackberry Cascades,我的应用程序中有4个页面,顺序是main.qml、login.qml、home.qml和profile.qml。home.qml有一个列表视图,其中列出了一些可以在profile.qml中修改的数据。因此,每当我从profile.qml返回home.qml时,我都需要刷新我的listview。我的main.qml有导航窗格,因此我编写了代码来刷新main.qml上的listview,它确实调用home.qml中的reloadview函数。我的问题是,如果用户第一次登录,那么导航堆栈的所有页面都[
function getMyContacts(contacts)
{
console.log("Contact List:" + contacts); //Contains list of updated contacts and prints correctly
contactsData.clear();
var blockedContacts = _settings.getArrayFor("blockList", null);
console.log("Blocked Contact List:" + blockedContacts);
var addContact = "true";
for (var cntNames in contacts) {
for (var blockedNames in blockedContacts) {
if (contacts[cntNames].toString() == blockedContacts[blockedNames].toString()) {
addContact = "false";
break;
} else {
addContact = "true";
}
}
if (addContact == "true") {
console.log("Inserting:"+contacts[cntNames].toString());
contactsData.insert({
name: contacts[cntNames].toString(),
last: contactsData.size(),
colors:getMyListItemColor(contactsData.size())
})
}
}
var newContacts = new Array();
for (var i = 0; i < contactsData.size(); i ++) {
if (contactsData.data([ i ]).name != '+' ) {
newContacts.push(contactsData.data([ i ]).name);
}
}
_settings.saveArray("contactList", newContacts); //Save the array of contacts in qsettings
console.log("UPdated Contact List:" + newContacts + " Size:"+contactsData.size().toString()); // This prints correctly
}
函数getMyContacts(联系人)
{
console.log(“联系人列表:”+联系人);//包含更新的联系人列表并正确打印
contactsData.clear();
var blockedContacts=\u settings.getArrayFor(“blockList”,null);
console.log(“阻止的联系人列表:“+blockedContacts”);
var addContact=“true”;
for(联系人中的姓名){
for(blockedContacts中的var blockedNames){
如果(联系人[cntNames].toString()==blockedContacts[blockedNames].toString()){
addContact=“false”;
打破
}否则{
addContact=“true”;
}
}
如果(addContact==“true”){
log(“插入:”+contacts[cntNames].toString());
contactsData.insert({
名称:联系人[cntNames].toString(),
最后:contactsData.size(),
颜色:getMyListItemColor(contactsData.size())
})
}
}
var newContacts=newarray();
对于(变量i=0;i
等等,main.qml和homepage.qml中是否有ListView?当您第一次创建HomePageDefinition时,可以存储HomePageDefinition,为什么还要尝试重新创建HomePageDefinition?我在main.qml中有一个listview来显示登录选项,它们是固定的,HomePageListView列出了所有其他数据。我正在尝试刷新主页列表视图。我在哪里重建主页?好的,我又看了一遍,你们不是在重建它。理解起来真是一团糟。为什么不把它放到profilepage.qml:nav.menuScreenPage.reloadView()
它应该调用函数。除此之外,我建议您在导航窗格内使用属性变量主页
并存储homepPageDefinition的对象我这样做了,我的问题不是没有调用该函数,它确实会被调用并记录正确的listview项,但listview不会得到更新。但是,如果函数被调用并打印正确的项,则reloadView()肯定有问题。让我们看看
Page {
id: loginPage
objectName: "loginPage"
Container {
//some code to validate login and push to homepage
var homePage=homePageDefinition.createObject();
nav.push(homePage);
}
}
profilepage.qml
===============
Page {
id: newProfilePage
objectName: "newProfilePage"
Container {
//some code
Button { //a button to pop to home page
id:popButton
horizontalAlignment: HorizontalAlignment.Right
verticalAlignment: VerticalAlignment.Bottom
onClicked: {
nav.pop();
}
}
}
}
This is my homepage structure
Page {
//some code
function reloadView()
{
homePageScroll.getMyContacts(_settings.getArrayFor("contactList", null));
}
Container {
layout: DockLayout {
}
ScrollView {
id: homePageScroll
Container {
layout: DockLayout {
}
ListView {
//somecode
}
}
function getMyContacts(contacts)
{
//code as shown below
}
}
attachedObjects:[
GroupDataModel {
id: contactsData
sortingKeys: [ "last" ]
grouping: ItemGrouping.None
}
]
}
ImageButton {
id: nextButton
defaultImageSource: "asset:///Images/next_button.png"
pressedImageSource: "asset:///Images/next_button_pressed.png"
horizontalAlignment: HorizontalAlignment.Right
verticalAlignment: VerticalAlignment.Bottom
onClicked: {
myMenuScreen = profilePageDefinition.createObject();
nav.push(myMenuScreen);
}
}
function getMyContacts(contacts)
{
console.log("Contact List:" + contacts); //Contains list of updated contacts and prints correctly
contactsData.clear();
var blockedContacts = _settings.getArrayFor("blockList", null);
console.log("Blocked Contact List:" + blockedContacts);
var addContact = "true";
for (var cntNames in contacts) {
for (var blockedNames in blockedContacts) {
if (contacts[cntNames].toString() == blockedContacts[blockedNames].toString()) {
addContact = "false";
break;
} else {
addContact = "true";
}
}
if (addContact == "true") {
console.log("Inserting:"+contacts[cntNames].toString());
contactsData.insert({
name: contacts[cntNames].toString(),
last: contactsData.size(),
colors:getMyListItemColor(contactsData.size())
})
}
}
var newContacts = new Array();
for (var i = 0; i < contactsData.size(); i ++) {
if (contactsData.data([ i ]).name != '+' ) {
newContacts.push(contactsData.data([ i ]).name);
}
}
_settings.saveArray("contactList", newContacts); //Save the array of contacts in qsettings
console.log("UPdated Contact List:" + newContacts + " Size:"+contactsData.size().toString()); // This prints correctly
}