Опитвам се да актуализирам цвета на фона на етикет вътре в TableViewRow. Използвам View/Controller за редовете, създавам ги в код и ги добавям като масив към TableView. Използване на onClick на TableViewRow и Label.setBackgroundColor() в контролера TableViewRow.
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 секунди за показване на таблицата, вместо ‹1 секунда при използване на setData*
Пример за неработещо реално приложение:
Пример за реално работещо приложение:
Това се случва след показване на поле за предупреждение или превъртане на редовете навън и обратно на екрана, или използване на appendRow за всеки ред
Методи, които се опитах да поправя (не поправих):
- използване на анимации
- премахване на етикета, след което създаване и добавяне на нов етикет в кода
- премахване на клас от TableViewRow
Използвам Titanium SDK 5.0.2.GA и компилирам на android 5.1.1.