2017-06-20 4 views
2

J'ai créé une table dynamique à partir d'une liste de tableauAndroid Studio - Table supprimant la ligne programme

for (int i = 0; i < arrayList.size(); i++) { 
     TextView name = new TextView(this); 
     TextView time = new TextView(this); 
     TableRow row = new TableRow(this); 

     // Set event name and remaining time 
     name.setText(arrayList.get(i).name); 
     time.setText("..."); 

     // Add text views to row 
     row.addView(time, layoutParams); 
     row.addView(name, layoutParams); 

     // Add row to table 
     tableLayout.addView(row, i); 
    } 

Maintenant, si je veux modifier ou supprimer certaines lignes sous une condition, je vais devoir accéder à cette ligne, mais Comment?

outerloop: 
    for(int i = 0; i < arrayList.size(); i++) { 
     if(// row's time <= 0 ...) { 
      tableLayout.removeViewAt(i); // this doesn't seem to work properly 
             // it removes the wrong rows 
     } 
     else { 
      // ... 
      break outerloop; 
     } 
    } 

Pour une raison quelconque, tableLayout.removeViewAt(i); supprime la ligne incorrecte. Alternativement, je préférerais éditer name de cette rangée, mais le principe s'applique, je dois juste trouver un moyen d'accéder à la rangée de table. En tous cas?

+0

vous pouvez également stocker votre 'row' dans une liste et y accéder via cette liste. –

+1

lorsque vous supprimez la première ligne de la tableLayout deuxième ligne deviendra la première rangée (l'index va changer). –

+0

@JineshFrancis Ohhh je vois !! N'était pas au courant de ça! Avez-vous des solutions de rechange? – user321070

Répondre

2

Créez votre table comme ceci:

ArrayList<TableRow> rows = new ArrayList<>(); 
for (int i = 0; i < arrayList.size(); i++) { 
    TextView name = new TextView(this); 
    TextView time = new TextView(this); 
    TableRow row = new TableRow(this); 
    rows.add(row); 

    // Set event name and remaining time 
    name.setText(arrayList.get(i).name); 
    time.setText("..."); 

    // Add text views to row 
    row.addView(time, layoutParams); 
    row.addView(name, layoutParams); 

    // Add row to table 
    tableLayout.addView(row, i); 
} 

Lorsque vous souhaitez supprimer une ligne maintenant, vous pouvez le faire par elle son index dans la ArrayList:

row = rows.get(i); 
table.removeView(row); 
rows.remove(i); 

Lorsque vous souhaitez supprimer plusieurs lignes cela pourrait être une solution pour vous:

ArrayList<TableRow> removeRows = new ArrayList<>(); 
for(int i = 0; i < rows.size(); i++) { 
    if(....) { 
     removeRows.add(rows.get(i)); 
    } 
} 

// now delete those rows 
for(TableRow remove : removeRows) { 
    tableLayout.removeView(row); 
    rows.remove(remove); 
} 

J'espère que cela fonctionne pour vous!

+1

C'est génial! Travaillé comme voulu! – user321070

+0

Aussi, 'rows.remove (i);' n'est probablement pas nécessaire? Comme il a aussi l'enlèvement des lignes aussi, il semble. – user321070

+0

Il n'est pas nécessaire si vous n'ajoutez aucune ligne ultérieurement. Le faites vous? – AppPhil