我正在尝试更新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/

10-09 02:08