1

テーブルビューを使用して、チタンで簡単なアプリケーションを作成します。左側にチェックボックスがあるカスタム行があります。これが私のコードです:

    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
            }

        }
    });

チェックしたときにチェックボックスに基づいて行を削除するだけです。行ごとにループしてチェックボックスをオンにしてから行を削除しようとしましたが、それでも範囲外のエラーインデックスが表示されます。

誰もそれを行う方法を知っていますか? 前もって感謝します..

4

2 に答える 2

3

TableViewAndroidからの行の削除にはいくつかのバグがあります。チェックされた行を除くすべての行で新しいデータ配列を作成してから、テーブルビューのデータを再度設定することができます。

于 2012-11-02T08:52:21.123 に答える
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);
        }
    }
});
于 2012-11-04T03:21:46.950 に答える