为数据绑定创建自定义绑定适配器



我正在获取配置文件的网络服务,其中我获得的性别为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}"

最新更新