我有两个按钮“Next element”和“Previous element”以及一些包含CellList的自定义小部件。 在按钮单击时,我调用我的widget的方法,通过调用它的SelectionModel来改变CellList中的选择:
selectionModel.setSelected(value, true);
当我刷新CellList的内容时,按钮工作正常,但是当我通过单击选择列表中的元素时,会发生以下行为: 例如,我在列表中有元素{0,1,2,3,4,..}。我点击元素1,然后按“下一个元素”按钮两次。这些SelectionChangeEvent发生:
但是在第2步之后,如果按“上一步”,它会正确返回到元素1.因此,我用鼠标点击的元素不会让选择围绕它进行超过1步。
我不知道第三个事件的来源。我的唯一猜测是手动选择事件在触发后继续挂起,但我不知道如何检查。
谁知道这个问题的原因?
UPD:
我发现确认点击事件的选择继续挂在EventBus的某处:当我更改搜索过滤器时,我访问SelectionModel的方式与按钮点击相同,并将选择设置为第一个元素。但是如果在此之前有用户点击CellList,则会发生同样的事情:首先,选择更改为0,其次,如果新选择的数据包含该元素,则返回到先前选择的位置。
upd(对于Ümit的问题):
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:找到导致此问题的原因: http://code.google.com/p/google-web-toolkit/issues/detail?id=6310
答案 0 :(得分:0)