在运行时切换UI:Binder Widgets

时间:2012-10-22 14:48:51

标签: gwt uibinder

我想要一个UI:Binder生成的页面,我可以在运行时切换部分UI。这是一个例子:

//...More UI Binder stuff
<g:Widget ui:field="generalWidget" />
//...More UI Binder stuff

现在在我的视图实现中,我想要更改generalWidget显示的确切窗口小部件类型。例如,我希望能够做到这样的事情:

@UiBinder Widget generalWidget;
...
if (<condition>) 
   generalWidget = new TabLayoutPanel(...);
else
   generalWidget = new FlowPanel(...);

然而,这对我不起作用。当我点击页面时,我得到:

java.lang.AssertionError: This UIObject's element is not set; you may be missing a call to either Composite.initWidget() or UIObject.setElement()
开发日志中的

。据我所知,这是由于我使用g:widget,因为如果我直接使用面板它可以工作。

解决此问题并获得我想要的切换窗口小部件行为的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您错过了provided = true上的@UiField

@UiField(provided = true) Widget generalWidget;

当然,请确保在致电createAndBindUi之前指定该字段!