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