0

我在 celltable 构造函数中编写了以下代码

 public ViewSubscriptionsCellTable(CellTableResource resource, final WidgetListener clickListener) {
        super(15, resource);
        this.resource = resource;
        setStyleName(CSS.LISTDATATABLE);
        setPageStart(0);
        expandedRows = new HashSet<String>();
        selectionModel = new SingleSelectionModel<ViewSubscriptionsWrapper>();
        setSelectionModel(selectionModel);
        selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler(){
            @Override
            public void onSelectionChange(SelectionChangeEvent event) {
                Window.alert("clicked");
            }
        });
        List<ViewSubscriptionsWrapper> viewSubscriptionsWrapperList = new ArrayList<ViewSubscriptionsWrapper>(); 
        setTableBuilder(new CustomTableBuilder());
        createColumns(clickListener);
        listDataProvider = new ListDataProvider<ViewSubscriptionsWrapper>(new ArrayList<ViewSubscriptionsWrapper>());
        listDataProvider.addDataDisplay(ViewSubscriptionsCellTable.this);
        createSortHandler();
        pager = new PagerWidget(TextLocation.CENTER);
        pager.setStyleName(CSS.WIDGET_TEXT_FONT);
        pager.setDisplay(ViewSubscriptionsCellTable.this);
        this.setColumnWidth(radioColumn, 5.0, Unit.PCT);
        this.setColumnWidth(msisdnColumn, 5.0, Unit.PCT);
        this.setColumnWidth(subscriptionColumn, 10.0, Unit.PCT);
        this.setColumnWidth(simTypeColumn, 10.0, Unit.PCT);
        this.setColumnWidth(simNumberColumn, 70.0, Unit.PCT);
    }

选择自定义无线电单元时调用以下方法

@Override
public void onBrowserEvent(Context context, Element elem, ViewSubscriptionsWrapper object, NativeEvent event) {
super.onBrowserEvent(context, elem, object, event);
clickListener.onWidgetEvent(new WidgetEvent(object, context.getIndex()));

}

删除 Window.alert 后,它不再起作用,并且单元格的 onBrowserEvent 没有被调用。我尝试删除 addSelectionChangeHandler ,但问题仍然存在。

注意:上面的想法在没有这个 addSelectionChangeHandler 的情况下有效,如果你使用键在行之间移动,然后按 enter。相反,我希望它只能通过单击而不是键盘按下来工作。

4

2 回答 2

0

因为onBrowserEvent每当收到浏览器事件时都会触发。当Window.alert 调用方法时,警报显示焦点转到警报窗口,父窗口会生成卸载事件。因此,由于该事件 onBrowserEvent被触发。

于 2013-05-15T13:13:27.873 回答
0

我删除了 addSelectionChangeHandler 并添加了以下内容并且它有效

this.addCellPreviewHandler(new Handler<ViewSubscriptionsWrapper>() {
          @Override
          public void onCellPreview(CellPreviewEvent<ViewSubscriptionsWrapper> event) {
              ViewSubscriptionsWrapper sample = event.getValue();
            if ("click".equals(event.getNativeEvent().getType())) {
                clickListener.onWidgetEvent(new WidgetEvent(sample, event.getIndex()));
            }
          }
        });
于 2013-05-16T05:53:55.290 回答