ID属性在Android设备上用Titanium返回null

问题描述:

我在SO和其他人身上搜索以找到解决方案。我用XML创建了一个TableView,ID为table并动态填充(通过创建几个TableViewRowsTextFields进入它们)。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,您可以使用以下两种方法:

  1. 使用appendRow方法tableView:在阵列替换您$.table.add(row);$.table.appendRow(row);

  2. 推所有行,然后使用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); 
    

希望它能帮助。

+0

我用方法'appendRow()'的第一个解决方案,它解决了我的问题。谢谢。 – user4289005 2014-11-26 07:12:52

这可能是一个“黑暗中的镜头” - 但我有一个名为“私人”的ID问题。我不得不将我的ID重命名为“isPrivate” - 所以我想其中有些不能是“保留名称”。我没有检查过 - 通过快速反复试验发现。但也许“表”是一个类似的保留字?

+0

即使我更改了它的id名称,堆栈跟踪也显示了相同的错误,但无论如何,谢谢。记住这是一个很好的建议。 – user4289005 2014-11-26 07:14:37