提供一个行id,覆盖Button.ClickListener,并在点击监听器中使用该id。
Object rowId = new Object();
Button button = new Button("Delete");
button.addClickListener(new RowDeleteListener(rowId));
//populate cells in the row, add the button & whatever
table.addItem(row, rowId);
public class RowDeleteListener implements Button.ClickListener {
Object rowId;
public RowDeleteListener(Object rowId) {
this.rowId = rowId;
}
public void buttonClick(ClickEvent event) {
table.removeItem(rowId);
}
}
或者André Schild’s solution,也就是在按钮上使用setData(rowId)。
Button button = new Button("Delete");
button.addClickListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
table.removeItem(getData());
}
});
//Populate row stuff.
button.setData(table.addItem(row, null));
我更喜欢第一个解决方案,因为它更清楚发生了什么,还因为按钮在添加到表之前而不是之后具有正确的行 ID。
或者,如果您想创建一些令人讨厌的东西:您可以使用 Button 对象作为行的 id。
Button button = new Button("Delete");
button.addClickListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
table.removeItem(this);
}
});
//populate row stuff, including adding the button to the row.
table.addItem(row, button);
我没有测试或编译任何这些,所以......你知道......