我搜索了SO和其他人找到了徒劳的解决方案。我使用ID为TableView
的XML创建了table
并动态填充(通过在其中创建多个TableViewRows
和TextFields
)。
问题如下:当我尝试使用$.table.add(row)
以编程方式添加所有已创建的项目时,我在浏览器上获得了预期结果,但在Android 设备上有NullPointerException
我在代码中进行了一些测试,以查看返回null
的内容,发现ID属性$.table
是问题所在。 Android中会发生什么以及如何解决它?
mytable.xml:
<Alloy>
<Window id="win_container">
<View id="wrapper">
<!-- The TableView -->
<TableView id="table" />
</View>
</Window>
</Alloy>
mytable.js:
for (...) {
// create TableViewRows
row = Ti.UI.createTableViewRow ({
className: "row",
...
});
// create several TextFields in one TableViewRow
for (...) {
tf = Ti.UI.createTextField ({
...
});
// add TextFields to the TableViewRow
row.add(tf);
}
// add TableViewRows to table
$.table.add(row); /// <----- '$.table' returns 'null'
}
任何帮助将不胜感激。
答案 0 :(得分:0)
IMO错误是因为您使用add
方法在表中添加行。
要向tableView
添加行,您可以使用以下两种方法:
使用tableView
的{{3}}方法:将$.table.add(row);
替换为$.table.appendRow(row);
推送数组中的所有行,然后使用appendRow
方法将其添加到tableView
。您的代码将类似于:
var dataRows = [];
for (...) {
// create TableViewRows
row = Ti.UI.createTableViewRow ({
className: "row",
...
});
// create several TextFields in one TableViewRow
for (...) {
tf = Ti.UI.createTextField ({
...
});
// add TextFields to the TableViewRow
row.add(tf);
}
dataRows.push(row);
}
// add TableViewRows to table
$.table.setData(dataRows);
希望它有所帮助。
答案 1 :(得分:0)
这可能是“在黑暗中拍摄” - 但我遇到了一个名为“私人”的问题。我不得不将我的id重命名为“isPrivate” - 所以我猜其中一些不能是“保留名称”。我没有检查过 - 只是通过快速反复试验找到了。但也许“桌子”是一个类似的保留字?