我创建了一些新的 RowExpander :
public class MTPRowExpander<M> extends RowExpander<M> {
    public static int id = 0;
    public static interface WidgetFactory<M> {
        public Widget createWidget(M model);
    }
    private WidgetFactory<M> wf;
    private Set<Integer> expandedRows;
    public MTPRowExpander(IdentityValueProvider<M> valueProvider,WidgetFactory<M> wf) {
        this(valueProvider,GWT.<RowExpanderAppearance<M>> create(RowExpanderAppearance.class),wf);
    }
    public MTPRowExpander(IdentityValueProvider<M> valueProvider,final RowExpanderAppearance<M> appearance, WidgetFactory<M> wf) {
        super(valueProvider, null, appearance);
        this.wf = wf;
        expandedRows = new HashSet<Integer>();
    }
    @Override
    protected boolean beforeExpand(M model, Element body, XElement row,int rowIndex) {
        if (expandedRows.contains(rowIndex)) {
            return true;
        } else {
            expandedRows.add(rowIndex);
            return super.beforeExpand(model, body, row, rowIndex);
        }
    }
    @Override
    protected String getBodyContent(final M model, int rowIndex) {
        final int curentid = id++;
        Scheduler.get().scheduleFinally(new ScheduledCommand() {
            @Override
            public void execute() {
                Widget widget = wf.createWidget(model);
                com.google.gwt.dom.client.Element item = grid.getElement().childElement(".widget" + curentid);
                item.appendChild(widget.getElement());
                ComponentHelper.setParent(grid, widget);
            }
        });
        return "<div class='widget" + curentid + "'></div>";
    }
}
我知道这个解决方案并不完美,但我不知道如何以更合适的方式解决问题。