我在自定义控件中设置了自定义属性,如下所示:
<declare-styleable name="MyControl" tools:ignore="ResourceName">
<attr name="ms_hide_arrow" format="boolean"/>
</declare-styleable>
然后,我的控件用于我的应用程序 xml 布局,这有效:
<MyControl
.................
app:ms_hide_arrow="false"
/>
但是如果我尝试使用数据绑定(bind)来提供值(value),就像这样:
<MyControl
.................
app:ms_hide_arrow="@{user.hideArrow}"
/>
我收到错误消息:
Error:(183, 34) Cannot find the setter for attribute 'app:ms_hide_arrow' with parameter type boolean on...
我错过了什么?如果我使用标准的 Android 控件,例如标准的微调器,我可以毫无问题地使用数据绑定(bind)设置它的属性。
我应该做些什么来使我的自定义控件能够与数据绑定(bind)一起使用吗?
[添加] 通过像这样添加 setter 解决了问题:
public void setMs_hide_arrow(boolean v)
{
hideArrow = v;
}
但是,当我尝试使用双向绑定(bind)时仍然存在问题,所以在 xml 中我设置:
app:ms_hide_arrow="@={user.hideArrow}
"
结束 setter/getter :
public boolean getMs_hide_arrow()
{
return hideArrow ;
}
我收到有关缺少 getter 的错误消息:
Error:(171, 9) Cannot find the getter for attribute 'app:ms_hide_arrow' with value type boolean on ...
Getter 在那里,怎么了?
最佳答案
例如在您的 View 模型中创建 bindingAdapter(您可以为所有 binderAdapter 创建一个类):
@BindingAdapter("msHideArrow")
public static void hideArrow(View View, boolean isVisible) {
if (isVisible) {
view.setVisibility(View.VISIBLE);
} else {
view.setVisibility(View.INVISIBLE);
}
}
在您的 Xml 文件中:
<MyControl
.................
app:msHideArrow="@{user.hideArrow}"
/>
关于java - CustomControl,xml 属性不适用于数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47792227/