我想要一个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,因为如果我直接使用面板它可以工作。
解决此问题并获得我想要的切换窗口小部件行为的最佳方法是什么?
答案 0 :(得分:2)
您错过了provided = true
上的@UiField
:
@UiField(provided = true) Widget generalWidget;
当然,请确保在致电createAndBindUi
之前指定该字段!