Как добавить обработчик кликов в подчиненную строку 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: О добавлении пользовательского виджета в таблицу потерь событий пользовательских виджетов для более красноречивого объяснения и примера кода.