Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用qml的blackberry级联中的Listview刷新问题_Listview_Blackberry_Qml_Blackberry 10_Blackberry Cascades - Fatal编程技术网

使用qml的blackberry级联中的Listview刷新问题

使用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函数。我的问题是,如果用户第一次登录,那么导航堆栈的所有页面都[

我的应用程序中有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(已修改) //在重载视图中调用“获取我的联系人”函数

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

}