我正在努力实现一个ListBox,我希望能够在用户在ListBox中进行选择时提醒用户。有没有办法响应用户单击列表框中的项目,并在“changeEvent”发生之前响应选择,这样我可以防止changeEvent被触发。我尝试过使用
Event.addNativePreviewHandler(new NativePreviewHandler() {
@Override
public void onPreviewNativeEvent(NativePreviewEvent event) {
System.out.println("EVENT: " + event.getTypeInt());
}
});
但是这永远不会响应单击ListBox中的特定元素,它只会在您关注ListBox时响应最初单击ListBox。我希望能够做到这样的事情:
Event.addNativePreviewHandler(new NativePreviewHandler() {
@Override
public void onPreviewNativeEvent(NativePreviewEvent event) {
if(event is changeEvent && event source is listBox) {
if(do some check here)
event.stopPropagation();
}
}
});
非常感谢任何建议,谢谢!
答案 0 :(得分:4)
感谢大家的意见。我最终做的是在列表框聚焦时保存选择的状态。保存此索引并在changeEvent发生时切换它,只有在允许的情况下才将其更改为下一个选择。
@UiHandler("listBox")
public void onListBoxFocus(FocusEvent event) {
this.saveListBoxSelection = listBox.getSelectedIndex();
}
@UiHandler("listBox")
public void onChange(ChangeEvent event) {
int newSelection = listBoxCompliant.getSelectedIndex();
listBox.setSelectedIndex(this.saveListBoxSelection);
if(proceed with change)
listBox.setSelectedIndex(newSelection);
else
//cancel event
这是使用uibinder完成的,但也可以通过简单地将此事件直接添加到listBox来完成。再次感谢您的评论!
答案 1 :(得分:3)
如果你不想对它进行处理,你可以简单地杀死它:
@Override
onChange(ChangeEvent event) {
// ask user if he wants to continue
// if yes
doSomething();
// if no
event.kill();
}
答案 2 :(得分:1)
允许ChangeEvent继续是没有害处的。您可以将您的逻辑添加到ChangeEvent处理程序。如果用户决定不继续,您只需将选择设置回上一个或删除选择。
@Override
onChange(ChangeEvent event) {
// ask user if he wants to continue
// if yes
doSomething();
// if no
myList.setSelectedIndex(-1);
}