我正在尝试更新TableViewRow内的Label的背景颜色。我在行中使用视图/控制器,在代码中创建它们,并将它们作为数组附加到TableView。在TableViewRow控制器内使用TableViewRow的onClick和Label.setBackgroundColor()。
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()
);
}
逐行追加行有时会修复该错误(并非每一行),但是对于我们的列表,显示表需要5-8秒,而不是使用setData *花费
实际应用无法正常运行的示例:
实际应用工作的示例:
在显示警告框或将行滚动出并返回到屏幕,或对每行使用appendRow之后,就会发生这种情况
我尝试修复的方法(未修复):
使用动画
删除标签,然后重新创建并在代码中添加新标签
从TableViewRow中删除类
我正在使用Titanium SDK 5.0.2.GA并在android 5.1.1上进行编译。
最佳答案
尝试使用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"
}
关于android - 无法更改TableViewRow onClick(Android)中的标签的backgroundColor-Appcelerator Titanium,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33390787/