我想将图像添加到我的手机中,因为我使用imageResouce,如下所示
interface Resources extends ClientBundle {
@Source("close.png")
ImageResource getImageResource();
}
Resources resources = GWT.create(Resources.class);
deleteJobColumn = new Column<EmployerJobs, ImageResource>(new ImageResourceCell()) {
@Override
public ImageResource getValue(EmployerJobs object) {
return resources.getImageResource();
}
};
它的工作非常好,我在我的手机中获取图像但现在我想将clickhandler添加到该图像,为此我正在使用如下的字段更新器
display.getListJobsWidget().getDeleteJobColumn().setFieldUpdater(
new FieldUpdater<EmployerJobs, ImageResource>() {
public void update(int index, EmployerJobs employerJobs,
ImageResource value) {
Window.alert("Hello");
}
});
所以现在当我点击上面的图像单元格时,它应该说“你好”,但它没有做任何事情..任何解决方案..
谢谢
答案 0 :(得分:2)
ImageResourceCell
没有任何线路可以调用ValueUpdater
,它只是用来绘制图像并完成它。
您可以通过以下几种方式更改此内容:
ImageResourceCell
并覆盖onBrowserEvent - 查看ButtonCell
以查看其如何运作ActionCell
- 这不会从客户端获取任何数据,但会允许您传入委托isntead,这将在单击该东西时运行。使用ActionCell(SafeHtml,Delegate<C>)
构造函数以html AbstractCell
,借用ImageResourceCell
中的呈现代码和ButtonCell
或ActionCell
中的事件代码,使代码保持通用性并可重复使用可能的。答案 1 :(得分:0)
Colin提供的第一个解决方案的示例。我发现覆盖getConsumedEvents有点棘手,但似乎运行良好。
public class ClickableImageResourceCell extends ImageResourceCell{
public ClickableImageResourceCell(){
super();
}
@Override
public Set<String> getConsumedEvents() {
Set<String> set = new HashSet<String>();
set.add("click");
return set;
}
@Override
public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context context, Element parent, ImageResource value, NativeEvent event, ValueUpdater<ImageResource> valueUpdater) {
super.onBrowserEvent(context, parent, value, event, valueUpdater);
if ("click".equals(event.getType())) {
EventTarget eventTarget = event.getEventTarget();
if (!Element.is(eventTarget)) {
return;
}
if (parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))) {
// Ignore clicks that occur outside of the main element.
keyDown(context, parent, value, event, valueUpdater);
}
}
}
protected void keyDown(Context context, Element parent, ImageResource value,
NativeEvent event, ValueUpdater<ImageResource> valueUpdater) {
if (valueUpdater != null) {
valueUpdater.update(value);
}
}
}