我正在创建一个自定义小部件,在UiBinder中说“CustomWid”。
在CustomWid.java文件中,我正在编写两个构造函数
一个零args像
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中使用两种类型的标记时,它会抛出错误
我的意思是如何使用我的自定义小部件标签像prdefined标签?
我正在使用@uiConstructor
,但它显示错误
请开发者......我需要尽早回答
答案 0 :(得分:4)
UiBinder只会为给定的小部件使用单个构造函数:无论是零参数构造函数还是@UiConstructor
(我很惊讶您说使用其中一个或另一个< em> call 但不是两者:一个人在每种情况下都应该失败,一个人应该在每种情况下都成功;如果你还没有用@UiConstructor
注释一个构造函数,那么<my:CustomWid/>
应该总是工作,<my:CustomWid a="str1" b="str2"/>
应该总是失败)
这里有两种解决方案:
a
和b
属性(void setA(String a)
和void setB(String b)
)使用setter,并可能稍后检查(例如,在onLoad
或{{ 1}})你既没有A又没有B,但没有A和B(如果这是你的规则)。onAttach
(如果您选择让UiBinder使用零参数构造函数-ie no @UiField(provided = true)
- 那么这意味着您必须将@UiConstructor
从XML移动到Java代码:a="str1" b="str2"
)。第一个选项有我的偏好。
答案 1 :(得分:0)
实际上是什么东西,并且将使用相同的对象(不完全是对象)返回,以便你不能返回相同的构造函数,所以如果你想要只是在你使用的另一个构造函数之前使用@UiConstructor标记定义xml元素属性值。如果有任何疑问通过@UiConstructor
,它将起作用答案 2 :(得分: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参数组件而没有参数也可以在同一页面中工作。