Как добавить обработчик кликов в подчиненную строку celltablebuilder

Я могу создавать пользовательские строки с помощью celltablebuilder. При нажатии на конкретную ячейку привязки я могу создать дополнительные строки для этой строки. В этой подпункте есть кнопки, при нажатии на которые мне нужно выполнить какое-то действие. Я могу добавить кнопки с clickhandler в subrow, но при нажатии на кнопку ничего не происходит clickhandler не срабатывает.

Может кто-нибудь, пожалуйста, помогите.

protected void buildRowImpl(GridDTO rowValue, int absRowIndex ) {
  buildRows(rowValue, absRowIndex, true);
  if (showingFriends.contains(rowValue.getComponentId())) {
     buildAdditonalRows( absRowIndex, gridDTO);
  }

}
private void buildAdditonalRows(int index, GridDTO rowValue, ){ 
     TableRowBuilder row = startRow();
     td = row.startTD();
     if(rowValue.getXpath() != null){
    //td.text(rowValue.getXpath());
    renderCell(td, createContext(1), cellTable.getColumn(1), rowValue);
 }else{
    td.text("");
 }
     td.endTD();
     td = row.startTD();
     Button button = new Button ();
 button.setText("Save");
 button.addClickHandler(new ClickHandler() {
 @Override
 public void onClick(ClickEvent event) {
     Window.alert("ssss");
     }
 });
 DivBuilder div = td.startDiv();
 div.html(new afeHtmlBuilder().appendHtmlConstant(button.toString()).toSafeHtml());
 div.end();
     td.endTD();
     row.endTR();
}

2 ответа

CellPreviewEvent предоставляет субиндекс. Вы можете использовать его, чтобы получить значение subrow. Пример использования:

dataGrid.addCellPreviewHandler(new CellPreviewEvent.Handler<TreeItem>() {
    @Override
    public void onCellPreview(final CellPreviewEvent<TreeItem> event) {
        if(event.getNativeEvent().getType().equals(BrowserEvents.CLICK)){
             if(event.getContext().getSubIndex()>0){
                    event.getValue().getChild(event.getContext().getSubIndex()-1);
             }
        }
    }
});

Или вы можете предоставить пользовательскую реализацию CellPreviewEvent.Handler с selectionMode. Для более подробной информации вы можете посмотреть на AbstractHasData

У меня была похожая ситуация, когда мне нужен был виджет внутри ячейки для прослушивания событий щелчка... Что я обнаружил, так это то, что виджет не реагирует на события после того, как вы вставили его в ячейку (другими словами, только фактический HTML, который компенсирует виджет, помещается в ячейку, любая обработка событий не включена). Обходной путь - добавить события в ячейку (вы можете создать собственный класс ячейки для этого конкретного виджета ячейки и переопределить OnBrowserEvent для прослушивания событий.)

См. GWT: О добавлении пользовательского виджета в таблицу потерь событий пользовательских виджетов для более красноречивого объяснения и примера кода.

Другие вопросы по тегам