Gwt 在运行时切换UI:Binder小部件
我希望有一个UI:Binder生成的页面,在那里我可以在运行时切换部分UI。下面是一个例子: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: 当然,在调用
//...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;