Я пытаюсь обновить цвет фона метки внутри 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" />
ПримерPage.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.