2017-06-20 98 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