我正在尝试更新TableViewRow中Label的背景颜色。我正在为行使用View / Controller,在代码中创建它们并将它们作为数组附加到TableView。在TableViewRow控制器中使用TableViewRow和Label.setBackgroundColor()的onClick。
ExampleRow.xml
<TableViewRow id="exampleRow" class="exampleClass" onClick="exampleClick">
<Label id="exampleLabel" text="test" />
</TableViewRow>
ExampleRow.js
var test = 1;
function exampleClick(e) {
if(test == 1) {
$.exampleLabel.setBackgroundColor('#0f0');
test = 0;
} else {
$.exampleLabel.setBackgroundColor('#fff');
test = 1;
}
}
ExamplePage.xml
<TableView id="exampleTable" />
ExamplePage.js
var tableViewRows = [];
for(var i = 0; i < 5; i++) {
tableViewRows.push(
Alloy.createController('exampleRow', {}).getView()
);
}
$.exampleTable.setData(tableViewRows);
问题是,只要应用加载,这在第一页上就不起作用。如果我在屏幕外滚动TableViewRows并返回,则背景颜色更改有效。如果弹出警告框,则后台更改有效。但在首次加载应用程序后,背景颜色不会改变。如果我们为每一行使用appendRow,它也可以工作,但这要慢得多。
appendRow修复示例:
for(var i = 0; i < 5; i++) {
$.exampleTable.appendRow(
Alloy.createController('exampleRow', {}).getView()
);
}
真实应用无效的示例:
真实应用的示例:
在显示警告框或向外滚动行并返回到屏幕或使用每行的appendRow
之后会发生这种情况。我尝试修复的方法(没有修复):
我正在使用Titanium SDK 5.0.2.GA并在android 5.1.1上进行编译。
答案 0 :(得分:2)
尝试使用tableView的click事件而不是tableViewRow:
<TableView onClick="yourTableViewClickEvent"></TableView>
然后定义在此函数回调中将执行的逻辑:
function yourTableViewClickEvent(e){
// access selected row
var currentSelectedRow = e.row;
// current selected Label we assume here that the row contain a label as first child (exactly what you have in your row definition
var currentLabel = currentSelectedRow.children[0]
// change label background color
currentSelectedRow.backgroundColor = "#0f0"
// You can even (i know it is no good to do that :)) test if the color is white or #0f0 like so
if(currentSelectedRow.backgroundColor == "#fff")
currentSelectedRow.backgroundColor = "#0f0"
else
currentSelectedRow.backgroundColor = "#fff"
}