我正在获取配置文件的网络服务,其中我获得的性别为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' 的设置器。 file: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 运行以获取完整的见解。
在 https://help.gradle.org 获取更多帮助
构建在 1 秒内失败 19 个可操作任务:4 个已执行,15 个最新
有人可以让我知道为什么我错了吗
不能从绑定适配器返回值,而应在绑定适配器中执行所需的操作。您的方法应该是:
@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}"