使用 qml 的黑莓级联列表视图中的自定义 listitemcomponent 更新问题
Custom listitemcomponent update issue in listview in blackberry cascades using qml
我有一个带有显示名称列表的自定义 listitemcomponent 的列表视图,当我在名称上滑动时它会显示用户全名和个人资料图片,为了实现这一点,我创建了 2 个视图(视图 1-只有名称(初始显示视图),视图 2- 带有图片和全名)在我的自定义 listitemcomponent 中,我通过它隐藏基于滑动动作的视图并且它工作正常。现在,当我单击任何名称时,该名称应该位于顶部,而其余部分保持原样,为了实现这一点,我维护了一个数组来保持更新列表的顺序,因此每当我点击一个名称时,它都会清除数据模型和从更新的数组中添加项目,它也能正常工作,但问题是当我在几个名字上滑动时,一些行将有视图 1,一些行将有视图 2,那时当我执行点击操作时,列表重新订单很好,但视图 2 的行包含与以前相同的值,我必须来回滑动以刷新此行。
例如,假设我在视图中显示了 4 个名字,
1
2
3
4
我已经在 2 和 3 上滑动,所以现在列表视图显示 -
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(),
})
}
}
}
}]
}
在您的 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
}
我有一个带有显示名称列表的自定义 listitemcomponent 的列表视图,当我在名称上滑动时它会显示用户全名和个人资料图片,为了实现这一点,我创建了 2 个视图(视图 1-只有名称(初始显示视图),视图 2- 带有图片和全名)在我的自定义 listitemcomponent 中,我通过它隐藏基于滑动动作的视图并且它工作正常。现在,当我单击任何名称时,该名称应该位于顶部,而其余部分保持原样,为了实现这一点,我维护了一个数组来保持更新列表的顺序,因此每当我点击一个名称时,它都会清除数据模型和从更新的数组中添加项目,它也能正常工作,但问题是当我在几个名字上滑动时,一些行将有视图 1,一些行将有视图 2,那时当我执行点击操作时,列表重新订单很好,但视图 2 的行包含与以前相同的值,我必须来回滑动以刷新此行。
例如,假设我在视图中显示了 4 个名字,
1
2
3
4
我已经在 2 和 3 上滑动,所以现在列表视图显示 -
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(),
})
}
}
}
}]
}
在您的 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
}