Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events GWT-CellList的SelectionChangeEvent意外触发_Events_Gwt_Celllist - Fatal编程技术网

Events GWT-CellList的SelectionChangeEvent意外触发

Events GWT-CellList的SelectionChangeEvent意外触发,events,gwt,celllist,Events,Gwt,Celllist,我有两个按钮“下一个元素”和“上一个元素”,以及一些包含CellList的自定义小部件。 单击按钮时,我调用我的小部件的方法,该方法通过调用其SelectionModel来更改CellList中的选择: selectionModel.setSelected(value, true); 当我刷新CellList的内容时,按钮工作正常,但当我通过单击列表中的元素来选择它时,会发生以下行为: 例如,我在列表中有元素{0,1,2,3,4,…}。我点击元素1,然后按下一个元素按钮两次。发生以下选择更改事

我有两个按钮“下一个元素”和“上一个元素”,以及一些包含CellList的自定义小部件。 单击按钮时,我调用我的小部件的方法,该方法通过调用其SelectionModel来更改CellList中的选择:

selectionModel.setSelected(value, true);
当我刷新CellList的内容时,按钮工作正常,但当我通过单击列表中的元素来选择它时,会发生以下行为: 例如,我在列表中有元素{0,1,2,3,4,…}。我点击元素1,然后按下一个元素按钮两次。发生以下选择更改事件:

第一次按下按钮时从1->2更改选择 第二次按2->3 3 -> 1 但在第2步之后,如果我按“上一步”,它将正确返回到元素1。所以我用鼠标点击的元素不会让选择在它周围移动超过一步。 我不知道第三件事是从哪里来的。我唯一的猜测是手动选择事件在触发后继续挂起,但我不知道如何检查。 有人知道这个问题的原因吗

upd: 我发现点击事件的选择仍然挂在EventBus中的某个位置:当我更改搜索过滤器时,我访问SelectionModel的方式与点击按钮相同,并将选择设置为第一个元素。但如果在此之前用户点击了CellList,同样的事情也会发生:首先,选择更改为0,其次,如果新选择的数据包含该元素,则返回到以前选择的

麻省理工学院问题的upd:

nextButton.addClickHandler(new ClickHandler() {
  @Override
  public void onClick(ClickEvent event) {
      /* Omitting checks that there are elements on the list,
         some element is selected and isn't last */
      T value = dataProvider.getList().get(currentIndex() + 1);
      singleSelectionModel.setSelected(value, true);
      singleSelectionModel.isSelected(value);
      Element rowElement = cellList.getRowElement(index);
      rowElement.scrollIntoView();
  }
}

upd:找到导致此问题的原因:

您似乎需要使用HandlerRegistration。因此,不调用多次单击事件

参考:


不知道你在说什么。按钮上附加了单击处理程序来更改我的小部件的状态。但我的问题是,第三个事件可能来自哪里?如何添加eventHandler。可能的情况可能是。。首先,在第一次按下时添加事件处理程序,如eHandler1,然后在另一次按下时添加。。您可以添加另一个事件处理程序,比如eHandler2。但第一个eHandler1似乎没有被清除。因此,在第二次单击中调用了两个EventHandler。您可以通过单击三次来确认。。它能跑三次吗?不是这样的。在单击CellList元素之前,按钮功能正常,但单击时,选择事件(我们称之为manualSelect)似乎没有正确地从EventBus启动,之后我调用它的SelectionModel来更改当前选择,manualSelect再次启动,将所选内容返回到我用鼠标单击的内容。即使我对EventBus的看法是正确的,我也不知道为什么第一次尝试调用SelectionModel时不触发manualSelect,而是第二次触发。为下一个元素和上一个元素发布ClickCallHandler的代码