2014-11-24 58 views
0

我在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' 
} 

任何幫助將不勝感激。

回答

0

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

0

這可能是一個「黑暗中的鏡頭」 - 但我有一個名爲「私人」的ID問題。我不得不將我的ID重命名爲「isPrivate」 - 所以我想其中有些不能是「保留名稱」。我沒有檢查過 - 通過快速反覆試驗發現。但也許「表」是一個類似的保留字?

+0

即使我更改了它的id名稱,堆棧跟蹤也顯示了相同的錯誤,但無論如何,謝謝。記住這是一個很好的建議。 – user4289005 2014-11-26 07:14:37

相關問題