2017-06-20 113 views
2

我從一個數組列表Android的工作室 - 編程

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

現在,如果我想編輯或條件下,刪除某些行創建表動態刪除錶行,我將不得不進入該行,但怎麼樣?

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; 
     } 
    } 

由於某種原因tableLayout.removeViewAt(i);刪除了不正確的行。或者,我寧願編輯該行的name,但是該原則適用,我只需要找到訪問表格行的方法。任何方式?

+0

您也可以將「行」存儲在列表中,並通過該列表訪問它們。 –

+1

當你從tableLayout第二行中刪除第一行時將成爲第一行(索引將會改變)。 –

+0

@JineshFrancis哦,我明白了!沒有意識到這一點!你有任何解決方法嗎? – user321070

回答

2

創建你的表是這樣的:

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

如果您現在要刪除行,你可以做到這一點通過它的ArrayList中指數:

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

當要刪除多行這可能是一個解決方案爲您:

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

我希望這適用於你!

+1

太棒了!按照想要的方式工作! – user321070

+0

另外,'rows.remove(i);'可能不需要?因爲它也弄亂了行的移除,看來。 – user321070

+0

如果您以後不添加任何行,則不需要。你做? – AppPhil