如何删除钛tableview中的选定行?

时间:2012-11-02 08:21:36

标签: javascript titanium tableview titanium-mobile

我使用表格视图在钛上进行简单的应用。我在左侧有一些带有复选框的自定义行。这是我的代码:

    var pickingData = [];

    for (var i = 0; i<25; i++){
        var row = Ti.UI.createTableViewRow({
            className:'forumEvent', // used to improve table performance
            backgroundSelectedColor:'cyan',
            layout:'vertical'
        });

        if (Titanium.Platform.osname === 'android'){
            var checkbox = Ti.UI.createSwitch({
                style:Ti.UI.Android.SWITCH_STYLE_CHECKBOX,
                value:false,
                left:10
            });
            row.add(checkbox);
        }

        var rndMatNo = (randomInt(50000)+10000) //randomInt is my random number function
        var lblMatNo = Ti.UI.createLabel({
            realValue:rndMatNo,
            text:'Mat No : ' + rndMatNo,
            font:{fontFamily:'Arial', fontSize:DefaultFontSize, fontWeight:'bold'},
            left:10,
            color:'#222'
        });
        row.add(lblMatNo);

        pickingData.push(row);
    }

    var tempPickingTable =  Titanium.UI.createTableView({
        data:pickingData,
        editable: Titanium.Platform.osname === 'iphone' ? true : false,
        name:'Picking table'
    });

    tempPickingTable.addEventListener('longclick',function(e){
        for (var i=0, length=tempPickingTable.data[0].rows.length;i<length;i++){
            if (tempPickingTable.data[0].rows[i].children[0].value === true){
                tempPickingTable.deleteRow(i); //Still error when i'm using delete row because index out of bound
            }

        }
    });

我想要的是在检查时根据复选框删除行。我已尝试为每一行循环并检查复选框然后删除该行,但它仍然给出错误索引超出范围。

有谁知道怎么做?提前谢谢..

2 个答案:

答案 0 :(得分:3)

在Android中从TableView删除行时会出现一些错误。您可以尝试使用除已检查的行之外的所有行创建新数据数组,然后再次为tableview设置数据。

答案 1 :(得分:1)

你正在向前遍历数组,并删除修改数组的行,这样你才能超出界限。你试过倒退吗?

tempPickingTable.addEventListener('longclick',function(e){
    for (var i=tempPickingTable.data[0].rows.length;i>=0;i--){
        if (tempPickingTable.data[0].rows[i].children[0].value === true){
            tempPickingTable.deleteRow(i);
        }
    }
});