我正在使用Momentics IDE(原生SDK)开发BlackBerry 10移动应用程序。
我有一个简单的ListView,我想根据选择状态更改特定项目的背景。我认为下面的代码可行,但它没有,任何人都可以帮助这个吗?
ListView{
id: simpleList
dataModel: groupDataModel
listItemComponents: [
ListItemComponent {
type: "item"
SQLvListItem {
id: containerItem
itemLabel: ListItemData.label
// Item Label Style
itemFontSize: ListItemData.fontSize
itemFontName: ListItemData.fontName
itemFontStyle: ListItemData.fontStyle
itemFontColor: containerItem.ListItem.selected ? ListItemData.fontColorSelected : ListItemData.fontColor
//Item background
containerBorderColor: ListItemData.borderColor
containerBackgroundColor: containerItem.ListItem.selected ? ListItemData.backgroundColorSelected : ListItemData.backgroundColor
}
}
]
onTriggered: {
var selectedItem = dataModel.data(indexPath);
if (selected() == indexPath){
select(indexPath, false);
dataModel.itemUpdated(indexPath)
}
else{
select(indexPath, true);
}
}
}
PS:" SQLvListItem"是我创建的自定义项目
答案 0 :(得分:1)
在您的SQLvListItem中,添加一个属性为“IsSelected”的bool,并使用containerUnselectedBackgroundColor和itemSelectedFontColor以及itemUnselectedFontColor添加containerSelectedBackgroundColor。
然后你可以这样做一个函数:
function selectedBackground(selectedItem){
if(selectedItem.isSelected){
selectedItem.itemFontColor: selectedItem.itemSelectedFontColor;
selectedItem.containerBackgroundColor: selectedItem.itemSelectedFontColor;
}
else{
selectedItem.itemFontColor: selectedItem.itemUnselectedFontColor;
selectedItem.containerBackgroundColor: selectedItem.itemUnselectedFontColor;
}
}
这样你就有了变量来存储selectedColor和unselectedColor的字体和背景,然后你可以动态地交换它们。当它被选中时,只需在选中时将isSelected标记为true,否则选择false。
我只有你的代码片段,所以我不确定这是否可行,但值得一试!
答案 1 :(得分:0)
实际上它很简单,您只需要使用 toggleSelection()功能切换项目选项; 如果选中该项目,则取消选择该项目该项目被取消选中,它将被选中。
ListView{
id: simpleList
dataModel: groupDataModel
listItemComponents: [
ListItemComponent {
type: "item"
SQLvListItem {
id: containerItem
itemLabel: ListItemData.label
// Item Label Style
itemFontSize: ListItemData.fontSize
itemFontName: ListItemData.fontName
itemFontStyle: ListItemData.fontStyle
itemFontColor: containerItem.ListItem.selected ? ListItemData.fontColorSelected : ListItemData.fontColor
//Item background
containerBorderColor: ListItemData.borderColor
containerBackgroundColor: containerItem.ListItem.selected ? ListItemData.backgroundColorSelected : ListItemData.backgroundColor
}
}
]
onTriggered: {
var selectedItem = dataModel.data(indexPath);
toggleSelection(indexPath) // (solution 1)
// Or you can use also
select(indexPath, (!isSelected(indexPath))) // (solution 2)
}
}