1

I have built a GWT (2.5) web application that, among other things, uses a DataGrid. I have used addDomHandler to add a DoubleClickEvent to select a row and perform an action, and it works great on the desktop. However, when I run the web application on a touch device, the double click zooms the screen instead. Is there are proper way to handle that? I would prefer to override the default behavior of zooming, but I have no idea where to begin. I suppose a long press might be more appropriate, but I have no idea where to begin with that either.

The code:

_dataGrid.addDomHandler(new DoubleClickHandler() {
  @Override
  public void onDoubleClick(DoubleClickEvent event) {
    // Do something exciting here!
  }
}, DoubleClickEvent.getType());
4

2 回答 2

0

好的,我找到了一个解决方案,但它可能对我的情况非常独特。我所做的是保留双击处理程序,并且还实现了慢速双击。换句话说,如果您按顺序选择 DataGrid 的同一行两次,无论您执行的速度有多快,应用程序都会将其解释为双击。这是代码:

   result.addDomHandler(new ClickHandler() {
  @Override
  public void onClick(ClickEvent event) {
    Scheduler.get().scheduleDeferred(new Command() {
    public void execute () {
      if (result.isDoubleTap()) {
        // Do the same thing a a double click.
      }
    }
      });
  }});

在选择更改处理程序之前触发了单击处理程序,因此我不得不推迟使用调度程序处理单击事件。“结果”是一个包含 DataGrid 和其他一些东西的组合,在每个“结果”中,我将最后一个选定的项目存储在一个私有变量中。然后在 IsDoubleTap() 中,我所做的就是查看当前选择是否与最后一个相同:

public boolean isDoubleTap() {
boolean result = false;
String selected = getSelected();

if (_lastSelect != null && selected != null && selected.equals(_lastSelect))
  result = true;
_lastSelect = selected;

return result;
}

因此,如果您执行正常的双击或慢速双击,您将获得相同的操作。我很高兴虽然我在很多地方都使用了这个结果对象,但它是我使用双击的唯一地方。而且我真的很想与委员会进行转换,该委员会决定使用触摸设备覆盖标准的双击行为是一件好事。

于 2013-07-03T23:14:16.147 回答
0

我唯一的想法是停止 DOM 事件的传播可能会阻止默认缩放行为。

虽然我很好奇它是否在触摸屏设备上注册为双击事件。值得尝试将处理程序放在 Root 上并查看您是否甚至可以捕获该事件。

也试试这个:只要让你的应用程序捕获 -any- DOM 事件并以某种方式简单地写出名称。这样,您应该找出正在触发的事件(可能是长触摸事件!)并可以为此编写处理程序。

于 2013-07-03T22:18:29.537 回答