Gwt 在运行时切换UI:Binder小部件

Gwt 在运行时切换UI:Binder小部件,gwt,uibinder,Gwt,Uibinder,我希望有一个UI:Binder生成的页面,在那里我可以在运行时切换部分UI。下面是一个例子: //...More UI Binder stuff <g:Widget ui:field="generalWidget" /> //...More UI Binder stuff 在开发日志中。据我所知,这是由于我使用了g:widget,因为如果我直接使用面板,它就可以工作 解决此问题并获得我想要的切换小部件行为的最佳方法是什么?您缺少@UiField上的提供的=true: 当然,在调用

我希望有一个UI:Binder生成的页面,在那里我可以在运行时切换部分UI。下面是一个例子:

//...More UI Binder stuff
<g:Widget ui:field="generalWidget" />
//...More UI Binder stuff
在开发日志中。据我所知,这是由于我使用了g:widget,因为如果我直接使用面板,它就可以工作


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

您缺少
@UiField
上的
提供的=true


当然,在调用
createAndBindUi
之前,请确保指定了该字段

Hm.我添加了
提供的
,并调用
generalWidget=newwidget()
就在
createAndBindUi
之前,但是我仍然得到相同的错误。另外,在调用
createAndBindUI
之后,我是否能够更改分配给generalWidget的内容?无需担心。我通过初始化面板并将其中一个分配给generalWidget.Hmm解决了这个问题。看起来我不能仅仅通过分配来切换小部件。是否需要调用某种重画/刷新方法?我目前只做以下切换:
generalWidget=instanceOfOtherWidget
如果要动态切换(即在
createAndBindUi
之后),则在UiBinder中放置一个容器(例如
SimplePanel
)并将小部件添加到该面板。备选方案包括
HTMLPanel
和一个容器元素(而不是小部件)。我之所以使用Widget,是因为它是我需要切换的两个Widget之间的公共父级。我不知道我可以用一个面板来做这件事。我现在就试试。非常感谢。
@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()
@UiField(provided = true) Widget generalWidget;