使用qml在黑莓级联中的listview中自定义listitemcomponent更新问题

时间:2015-01-13 04:49:36

标签: listview blackberry qml blackberry-10 blackberry-cascades

我有一个自定义listitemcomponent列表视图,显示名称列表,当我在名称上滑动它显示用户全名和个人资料图片时,为了实现这一点,我创建了2个视图(视图1 - 只有名称(初始)在我的自定义listitemcomponent中显示视图),用图片和全名查看2-,我通过它根据滑动操作隐藏视图,它工作正常。现在,当我点击任何名称时,名称应该返回顶部,其余部分保持原样,为了实现这一点,我保留了一个数组,使更新的列表按顺序排列,所以每当我点击名称时,它就会清除数据模型,从更新的数组添加项目,它也可以工作,但问题是,当我刷几个名称时,一些行将有视图1,一些行将有视图2,那时我执行单击操作列表重新订单很好,但视图2的行包含与以前相同的值,我必须来回刷卡以刷新此行。

例如说我的视图中有4个名字显示为,

1

2

3

4

我已经刷了2和3所以现在listview显示 -

1

第2行详细信息

第3行详细信息

4

点击4后,列表显示 -

4

第2行详细信息//swiping here shows correct value 1 and swipe back shows row 1 detail

第3行详细信息

3

无论如何更新自定义listitemcomponent还是可以在删除行时删除它的实例,并在添加时再次重新创建。下面是我的列表视图的示例结构。我需要它来支持10.0及以上的

ListView {
                    id: contactListView
                    dataModel: contactsData
                    listItemComponents: [
                        ListItemComponent {
                            id: homeListComponent
                            type: "item"
                            CustomListItemHomePage { //This is my custom listitem that has two views
                                id: listCell

            onClicked:{
                var newContacts = new Array();
                                    newContacts.push(ListItemData.name);
                                    for (var i = 0; i < listCell.ListItem.view.dataModel.size(); i ++)
                                    {
                                        if(listCell.ListItem.view.dataModel.data([ i ]).name!=ListItemData.name)
                                        {
                                         newContacts.push(listCell.ListItem.view.dataModel.data([ i ]).name);
                                        }

                                    }

                                    listCell.ListItem.view.dataModel.clear();
                                    for (var cntNames in newContacts) {
                                        listCell.ListItem.view.dataModel.insert({
                                                name: newContacts[cntNames].toString(),
                                                last: listCell.ListItem.view.dataModel.size(),

                                            })


                                    }
                }
                    }
                    }]
    }

1 个答案:

答案 0 :(得分:1)

在CustomListItemHomePage上,添加以下代码行:

function init(){
    ListItemData;//This is your new data to (re)init your cell as you wish
}

ListItem.onDataChanged: {
    init();//RE-init the cell when data is refreshed after recycling
} 

onCreationCompleted: {
    init();//Init the cell for the first time
}