我为数据绑定创建了一个自定义属性,它不需要任何参数,它所做的就是使用TextinputEditText,但我无法找到在xml属性中传递void参数的方法。 / p>
这不会编译。
BindingAdapter.java
@BindingAdapter("app:validator")
public static void textValidator(TextInputLayout textInputLayout) {
doesSomething();
}
layout_file.xml
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:validator="@{ void }">
<android.support.design.widget.TextInputEditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"" />
</android.support.design.widget.TextInputLayout>
我尝试在xml中传递void或null但它只是没有编译。 我研究并发现该方法中至少应该有一个或两个值参数。所以我可以通过传递参数使其工作,让我们说一个布尔值只是为了传递而不是使用它。例如,
这个编译。但它只是一个黑客,有人请建议一个更好的方法。
BindingAdapter.java
@BindingAdapter("app:validator")
public static void textValidator(TextInputLayout textInputLayout, boolean bl) {
doesSomething();
}
layout_file.xml
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:validator="@{ booleanVariable }">
<android.support.design.widget.TextInputEditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"" />
</android.support.design.widget.TextInputLayout>
答案 0 :(得分:1)
但它只是一个黑客,有人请建议一个更好的方法。
没有更好的方法,因为这不是数据绑定的目的。它的意图是字面上绑定数据,这意味着你应该在视图中设置一些数据(一个参数)而不必在你的代码中手动执行它。
您尝试执行的操作并不真正有意义,因为只有在传递要绑定到给定视图的数据时才会评估自定义绑定。因此,您最终会得到传递一些虚拟值的代码,只是为了触发验证,此时您也可以自己手动触发验证,这比通过这样的数据绑定间接进行验证要清晰得多。
如果您想在另一个视图中验证您的视图以响应某些事件,请说一个&#34;提交按钮&#34;单击或某事,然后您可以将事件处理程序绑定到该控件,然后调用您的doesSomething()
方法。请参阅section on event handling in the data binding documentation。
希望有所帮助。
答案 1 :(得分:0)
您可以通过一个验证标准,例如一个枚举,指示它是否必须验证电子邮件,数字,最小长度的字符串等,甚至是错误消息:
@BindingAdapter({"app:validation", "app:errorMsg"})
public static void setErrorEnable(EditText editText, StringValidationRules.StringRule stringRule, final String errorMsg)