为数据绑定创建自定义绑定适配器
Creatign a custom binding adapter for databinding
我正在获取配置文件的 Web 服务,其中我获得的性别为 1- 男性 2- 女性和 3- 不受欢迎(参考)。 Web 服务为我提供了 1、2、3 的值。
我正在使用双向数据绑定来设置我编写的自定义绑定适配器向我抛出错误。
这是自定义活页夹代码
@BindingAdapter({"android:gender"})
public static String loadGender(Integer genderCode) {
if (genderCode == 1) {
return "Male";
} else if (genderCode == 2) {
return "Female";
} else if (genderCode == 3) {
return "Not Preferred";
}
return null;
}
从 xml 我接受 android:gender=@{userProfile.xxxx}
但我没有得到转换值
失败:构建失败,出现异常。
出了什么问题:
任务“:app:compileDebugJavaWithJavac”执行失败。
android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'android:gender' with parameter type java.lang.String on android.support.design.widget.TextInputEditText.
file:D:\AndroidProjects\HMA\hma_1.0_ankit\HMA-Android\HmaApplication\app\src\main\res\layout\fragment_profile_user.xml
loc:136:42 - 136:67
****\ data binding error ****
尝试:
运行 使用 --stacktrace 选项获取堆栈跟踪。 运行 使用 --info 或 --debug 选项以获得更多日志输出。 运行 使用 --scan 以获得完整的见解。
获取更多帮助
1 秒内构建失败
19 个可操作任务:4 个已执行,15 个已更新
谁能告诉我为什么我错了
您不能 return 来自绑定适配器的值,您应该在绑定适配器内部做您想做的事。你的方法应该是:
@BindingAdapter("android:gender")
public static void loadGender(TextInputEditText textInputEditText, int genderCode) {
String gender = null;
if (genderCode == 1) {
gender = "Male";
} else if (genderCode == 2) {
gender = "Female";
} else if (genderCode == 3) {
gender = "Not Preferred";
}
textInputEditText.setText(gender);
}
数据绑定将自动传入您使用 android:gender
属性的 TextInputEditText。
此外,您应该按如下方式使用您的属性:
android:gender="@{userProfile.xxxx}"
(注意@{}两边的引号)
建议改进:因为您没有覆盖原生 Android 属性(android:gender
通常不是视图的属性),我建议你更愿意称你的属性为 "gender"。因此,您使用 @BindingAdapter("gender")
定义绑定适配器,并在 XML 中将您的属性引用为 app:gender="@{userProfile.xxxx}"
我正在获取配置文件的 Web 服务,其中我获得的性别为 1- 男性 2- 女性和 3- 不受欢迎(参考)。 Web 服务为我提供了 1、2、3 的值。
我正在使用双向数据绑定来设置我编写的自定义绑定适配器向我抛出错误。
这是自定义活页夹代码
@BindingAdapter({"android:gender"})
public static String loadGender(Integer genderCode) {
if (genderCode == 1) {
return "Male";
} else if (genderCode == 2) {
return "Female";
} else if (genderCode == 3) {
return "Not Preferred";
}
return null;
}
从 xml 我接受 android:gender=@{userProfile.xxxx}
但我没有得到转换值
失败:构建失败,出现异常。
出了什么问题: 任务“:app:compileDebugJavaWithJavac”执行失败。
android.databinding.tool.util.LoggedErrorException: Found data binding errors. ****/ data binding error ****msg:Cannot find the setter for attribute 'android:gender' with parameter type java.lang.String on android.support.design.widget.TextInputEditText. file:D:\AndroidProjects\HMA\hma_1.0_ankit\HMA-Android\HmaApplication\app\src\main\res\layout\fragment_profile_user.xml loc:136:42 - 136:67 ****\ data binding error ****
尝试: 运行 使用 --stacktrace 选项获取堆栈跟踪。 运行 使用 --info 或 --debug 选项以获得更多日志输出。 运行 使用 --scan 以获得完整的见解。
- 获取更多帮助
1 秒内构建失败 19 个可操作任务:4 个已执行,15 个已更新
谁能告诉我为什么我错了
您不能 return 来自绑定适配器的值,您应该在绑定适配器内部做您想做的事。你的方法应该是:
@BindingAdapter("android:gender")
public static void loadGender(TextInputEditText textInputEditText, int genderCode) {
String gender = null;
if (genderCode == 1) {
gender = "Male";
} else if (genderCode == 2) {
gender = "Female";
} else if (genderCode == 3) {
gender = "Not Preferred";
}
textInputEditText.setText(gender);
}
数据绑定将自动传入您使用 android:gender
属性的 TextInputEditText。
此外,您应该按如下方式使用您的属性:
android:gender="@{userProfile.xxxx}"
(注意@{}两边的引号)
建议改进:因为您没有覆盖原生 Android 属性(android:gender
通常不是视图的属性),我建议你更愿意称你的属性为 "gender"。因此,您使用 @BindingAdapter("gender")
定义绑定适配器,并在 XML 中将您的属性引用为 app:gender="@{userProfile.xxxx}"