gpt4 book ai didi

java - CustomControl,xml 属性不适用于数据绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 10:21:33 25 4
gpt4 key购买 nike

我在自定义控件中设置了自定义属性,如下所示:

<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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com