Celltable onBrowserEvent не вызывается

Я написал ниже код в конструкторе таблицы ячеек

 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, если вы перемещаетесь между строками с помощью клавиш, а затем нажимаете ввод. Вместо этого я хотел, чтобы он работал только с щелчком мыши и без нажатия на клавиатуру.


person sujikin    schedule 15.05.2013    source источник


Ответы (2)


Поскольку onBrowserEvent срабатывает всякий раз, когда принимается событие браузера... когда вызывается метод Window.alert, фокус отображения предупреждения переходит в окно предупреждения, родительское окно генерирует событие выгрузки.

person bNd    schedule 15.05.2013
comment
как запустить фиктивное событие браузера, которое поможет запустить onBrowserEvent или любое другое решение? - person sujikin; 15.05.2013
comment
Я не понимаю, что вы пытались, но если переключатель предназначен для выбора записи, вам нужно использовать CheckboxCell вместо радио и использовать createCheckboxManager. Другое мудрое событие Dom просто пример > stackoverflow.com/questions/16542266/ - person bNd; 15.05.2013
comment
Кнопка-переключатель используется потому, что за один раз можно выбрать только одну запись. Позвольте мне проверить эту ссылку. - person sujikin; 15.05.2013
comment
А также перейдите по этой ссылке thoughtsofthree.com/2011/02/creating-a- gwt-radiobuttoncell - person bNd; 15.05.2013
comment
Я использовал только эту идею. Просто его нужно обновить для GWT 2.5. Сигнатуры методов изменились в последней версии. - person sujikin; 15.05.2013

Я удалил 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()));
            }
          }
        });
person sujikin    schedule 16.05.2013