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

标签 java android attributes custom-controls android-databinding

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

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

相关文章:

java - 为什么我的应用中的动画在从 playStore 下载时不起作用,但在 AndroidStudio 中却起作用?

android - Espresso - 单击单个 ListView 项

jquery - 是否可以将定义的变量用作 'data-content' 用于 jQuery 中的数据属性选择器?

jquery - 获取新前置元素的属性值

c# - 比较属性不使用比较属性的显示属性

java - 域模型到 JSON - 深度序列化的问题

java - chalice 或玩!对于前 RoR 开发人员?

android - 将 STL 与 Android NDK 一起使用时出现 Eclipse 索引器错误

java - 如何同时比较一个变量和两个值?

android - 尝试启动库项目 Activity