CustomControl,xml属性不使用数据绑定

时间:2017-12-13 11:46:11

标签: java android attributes custom-controls android-databinding

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

<declare-styleable name="MyControl" tools:ignore="ResourceName">
    <attr name="ms_hide_arrow" format="boolean"/>
</declare-styleable>

然后,我的控件在我的应用程序xml布局中使用,这有效:

 <MyControl
  .................
  app:ms_hide_arrow="false"
/>

但是如果我尝试使用数据绑定来提供价值,就像这样:

 <MyControl
  .................
  app:ms_hide_arrow="@{user.hideArrow}"
/>

我收到错误消息:

  

错误:(183,34)找不到属性的setter   &#39;应用程序:ms_hide_arrow&#39;参数类型为boolean on ...

我错过了什么?如果我使用标准的Android控件,例如标准微调器,我可以使用数据绑定设置其属性而没有任何问题。

我应该做些什么来使我的自定义控件能够与数据绑定一起使用吗?

[加入] 通过添加这样的setter来解决问题:

public void setMs_hide_arrow(boolean v)
{
  hideArrow = v;
}

但是,当我尝试使用双向绑定时仍然存在问题,因此在xml中设置:

app:ms_hide_arrow="@={user.hideArrow}&#34;

结束吸气:

public boolean getMs_hide_arrow()
{
   return hideArrow ;
}

我收到有关遗失getter的错误消息:

  

错误:(171,9)无法找到属性的getter   &#39;应用程序:ms_hide_arrow&#39;值类型为boolean on ...

Getter在那里,出了什么问题?

1 个答案:

答案 0 :(得分:1)

例如在您的视图模型中创建像这样的bindingAdapter(您可以为所有的活页夹适配器创建一个类):

@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}"
/>