2012-11-02 5 views
1

Je fais une application simple sur le titane en utilisant la vue de table. J'ai une ligne personnalisée avec une case à cocher sur le côté gauche. Voici mon code:Comment supprimer une ligne sélectionnée dans titanium tableview?

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 
      } 

     } 
    }); 

Tout ce que je veux, c'est de supprimer la ligne en fonction de la case cochée. J'ai essayé de faire une boucle pour chaque ligne et cochez la case, puis supprimez la ligne, mais elle me donne toujours l'index d'erreur hors limite.

Est-ce que quelqu'un sait comment faire cela? merci à l'avance ..

Répondre

1

Vous itérez en avant dans le tableau et en supprimant les lignes, ce qui modifie le tableau, il est donc logique que vous dépassiez les limites. Avez-vous essayé de revenir en arrière?

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); 
     } 
    } 
}); 
+0

Salut Dawson .. Merci pour votre réponse .. cela fonctionne parfaitement pour moi .. :) –

3

Il ya quelques bugs dans la suppression des lignes de TableView dans Android. Vous pouvez essayer de créer un nouveau tableau de données avec toutes les lignes à l'exception de celles qui ont été vérifiées, puis redéfinir les données pour la table.

+0

Salut Sapan .. merci pour votre commentaire .. :) mais je cherche les autres façons .. merci encore: D –

+0

« Il y a des bugs » est plutôt inconsistant, ne pensez-vous pas? Surtout dans ce cas où le vrai problème est l'algorithme. Vous avez fourni une solution de contournement décente, cependant ... –

Questions connexes