您必须绑定膨胀视图才能创建数据绑定。在您的示例中,您正在绑定容器的布局。
您可以通过多种方式做到这一点。最简单的是将其绑定为通货膨胀的一部分:
public class CustomView extends LinearLayout
{
CustomViewBinding mBinding;
public CustomView(Context inContext, AttributeSet inAttrs)
{
super(inContext, inAttrs);
LayoutInflater inflater = LayoutInflater.from(inContext);
// I assume you want it inflated into this ViewGroup
mBinding = CustomViewBinding.inflate(inflater, this, true);
}
public void setVariable(CustomView inCustomView, VariableType inMyVariable) {
mBinding.setVariable(inMyVariable);
}
...
}
您实际上并不需要绑定适配器,除非您不希望设置器作为自定义视图的一部分。在这种情况下,您仍然需要一种方法来获取绑定,因此您需要添加如下内容:
public CustomViewBinding getBinding() { return mBinding; }
这样你的绑定适配器就可以工作了。
如果您知道 LinearLayout 内容全部来自膨胀视图,则可以使用如下绑定适配器:
@BindingAdapter({"app:variable"})
public static void setVariable(CustomView inCustomView, VariableType inMyVariable)
{
if (inCustomView.getChildCount() == 0) {
return;
}
View boundView = inCustomView.getChildAt(0);
CustomViewBinding binding = DataBindingUtil.getBinding(boundView);
binding.setMyVariable(inMyVariable);
}
如果您的自定义视图不是非常自定义,您可以直接包含您的布局:
<include layout="@layout/custom_view" app:variable="@{myVariableValue}"/>
当然,您必须将 LinearLayout 移至 custom_view.xml 中。