创建用于数据绑定的自定义绑定适配器

时间:2018-07-02 14:12:13

标签: android android-databinding

我正在获取一个配置文件的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运行以获取完整的见解。

  • https://help.gradle.org

  • 获得更多帮助

1秒内失败 19个可执行任务:已执行4个任务,最新15个任务


有人可以让我知道我为什么做错

1 个答案:

答案 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}"