ID属性在Android设备上用Titanium返回null
我在SO和其他人身上搜索以找到解决方案。我用XML创建了一个TableView
,ID为table
并动态填充(通过创建几个TableViewRows
和TextFields
进入它们)。ID属性在Android设备上用Titanium返回null
的问题是:当我尝试用$.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'
}
任何帮助将不胜感激。
IMO错误是因为您用于在表中添加行的add
方法。
添加一行到tableView
,您可以使用以下两种方法:
使用
appendRow
方法tableView
:在阵列替换您$.table.add(row);
与$.table.appendRow(row);
-
推所有行,然后使用
setData
方法将其添加到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);
希望它能帮助。
这可能是一个“黑暗中的镜头” - 但我有一个名为“私人”的ID问题。我不得不将我的ID重命名为“isPrivate” - 所以我想其中有些不能是“保留名称”。我没有检查过 - 通过快速反复试验发现。但也许“表”是一个类似的保留字?
即使我更改了它的id名称,堆栈跟踪也显示了相同的错误,但无论如何,谢谢。记住这是一个很好的建议。 – user4289005 2014-11-26 07:14:37
我用方法'appendRow()'的第一个解决方案,它解决了我的问题。谢谢。 – user4289005 2014-11-26 07:12:52