我正在获取一个配置文件的Web服务,在该配置文件中,我获得的性别为 1-男性2-女性和3-不受欢迎(参考)。 Web服务给我的值为 1、2、3 。
我正在使用2向数据绑定来设置我编写的自定义绑定适配器,这会向我抛出错误。
这是自定义活页夹代码
@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:发现数据绑定错误。 **** /数据绑定错误**** msg:在android.support.design.widget.TextInputEditText上找不到参数类型为java.lang.String的属性“ android:gender”的设置器。 文件:D:\ AndroidProjects \ HMA \ hma_1.0_ankit \ HMA-Android \ HmaApplication \ app \ src \ main \ res \ layout \ fragment_profile_user.xml 位置:136:42-136:67 **** \数据绑定错误****
尝试: 使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。使用--scan运行以获取完整的见解。
1秒内失败 19个可执行任务:已执行4个任务,最新15个任务
有人可以让我知道我为什么做错
答案 0 :(得分:1)
您不能从绑定适配器返回值,而是应该在绑定适配器内部执行所需的操作。您的方法应为:
@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
通常不是视图的属性),因此建议您将属性称为“性别”。因此,您可以使用@BindingAdapter("gender")
定义绑定适配器,并将XML中的属性引用为app:gender="@{userProfile.xxxx}"