3

我正在创建一个自定义小部件,在 UiBinder 中说“CustomWid”。在 CustomWid.java 文件中,我正在编写两个构造函数,其中一个参数为零,例如 CustomWid(){....}

 another with some args like 

CustomWid(String a,String b){......} 所以,现在我在另一个 .ui.xml 文件中使用我的自定义小部件,在那个 .ui.xml 文件中,当我们单独给予时它工作正常,当我们 <my:CustomWid/> 单独给予时也很好 <my:CustomWid a="srt1" b="str2"/> 但是“我的问题”是每当我试图将两个标签都放在一个 .ui.xml 中,因为 <my:CustomWid/> <my:CustomWid a="str1" b="str2"/> 现在当我在单个 .ui.xml 中使用两种类型的标签时会引发错误我的意思是如何像预定义标签一样使用我的自定义小部件标签?我正在使用@uiConstructor,但它显示错误请开发人员...我需要尽快回答

4

2 回答 2

4

UiBinder 只会对给定的小部件使用一个构造函数:要么是它的零参数构造函数,要么是一个@UiConstructor(我很惊讶你说它在使用一个或另一个调用但不能同时使用两者时工作:一个应该在每种情况下都失败, 并且在每种情况下都应该成功;如果你没有用 注释构造函数@UiConstructor,那么<my:CustomWid/>应该总是工作并且<my:CustomWid a="str1" b="str2"/>应该总是失败)

这里有两种解决方案:

  • aandb属性(void setA(String a)void setB(String b))使用设置器,并可能稍后检查(例如,在onLoador中onAttach)您没有或同时拥有 A 和 B,但不是没有另一个(如果这是您的规则)。
  • @UiField(provided = true)当您需要使用其他构造函数时使用(如果您选择让 UiBinder 使用零参数构造函数 - 即不@UiConstructor- 那么这意味着您必须将a="str1" b="str2"XML 从 XML 移动到 Java 代码:)@UiField(provided = true) CustomWid myCustomWid = new CustomWid("str1", "str2")

第一个选项有我的偏好。

于 2013-07-19T09:45:56.933 回答
0

它不会显示任何错误...'

  @UiConstructor
  public Component(String displayText,String heading)
      {
 initWidget(uiBinder.createAndBindUi(this));

  this.displayText.setText(displayText);
    this.heading.setText(heading);  
    }`

现在使用另一个带有默认参数的构造函数, public Component() { initWidget(uiBinder.createAndBindUi(this)); }
如果您添加带有 xml 参数的组件并且不带参数的组件也可以在同一页面中使用,它现在也可以工作。

于 2013-07-19T10:02:54.843 回答