我创建了一个自定义单元格,用于确定是显示SelectionCell
还是TextCell
。如果是SelectionCell
渲染,我无法触发setFieldUpdater
方法。
以下代码......
private class CustomTypeCell extends AbstractCell<String>
{
SelectionCell selectCell = new SelectionCell(cardMnemonics);
TextCell textCell = new TextCell();
@Override
public void render(
Context context,
String value, SafeHtmlBuilder sb)
{
if (value != null)
{
textCell.render(context, value, sb);
}
else
{
selectCell.render(context, "", sb);
}
}
}
private class CustomTypeColumn extends Column<Object, String>
{
public CustomTypeColumn(CustomTypeCell cell)
{
super(cell);
}
@Override
public String getValue(Object object)
{
return object.getStringValue();
}
}
使用......
实施CustomTypeCell cell = new CustomTypeCell();
CustomTypeColumn customCol = new CustomTypeColumn(cell);
customCol.setFieldUpdater(new FieldUpdater<Object, String>()
{
public void update(int index, Object object, String value)
{
object.setStringValue(value);
// perform action }
});
cellTable.addColumn(customCol, "Custom Column");
如果我使用带有SelectionCell
的标准列,这可以正常工作。
答案 0 :(得分:0)
渲染是不够的,您还希望将事件处理委托给适当的单元格实现:将您的if / else结构添加到onBrowserEvent
中,并确保在getConsumedEvents
中监听相应的事件。
您可能还应该实现resetFocus
。
您可能会在CompositeCell
代码中找到灵感。