Ben,TabContainerPresenter 仅适用于每个选项卡是一个地方的情况。至于您的问题,您只需要在每个选项卡中设置相同的演示者小部件。如果您将演示者小部件注入多个选项卡中,您可能希望演示者小部件不是单例。这是在主演示者的插槽中设置演示者小部件的示例:
@Override
protected void onBind() {
super.onBind();
setInSlot(TYPE_PermitContent, permitPresenter);
setInSlot(TYPE_ErpMessageContent, orgErpMessagePresenter);
setInSlot(TYPE_ContractDetailContent, contractDetailPresenter);
}
然后在视图上,在我的示例许可证和 erp 上是 TabLayoutPanel 中的选项卡:
@Override
public void setInSlot(Object slot, Widget content) {
if (content == null) return;
if (slot == ContractPopupWithTabPresenter.TYPE_PermitContent) {
permit.clear();
permit.add(content);
} else if (slot == ContractPopupWithTabPresenter.TYPE_ErpMessageContent) {
erp.clear();
erp.add(content);
} else if (slot == ContractPopupWithTabPresenter.TYPE_ContractDetailContent) {
contractDetail.clear();
contractDetail.add(content);
} else {
super.setInSlot(slot, content);
}
}
然后在您的 TabLayoutPanel 上添加一个 beforeSelection 处理程序,它可能看起来像这样:
tabPanel.addBeforeSelectionHandler(new BeforeSelectionHandler<Integer>() {
@Override
public void onBeforeSelection(BeforeSelectionEvent<Integer> event) {
//TODO: Set your presenter widget here with whatever argument it needs to populate itself
}
});
希望这可以帮助。