【问题标题】:Creatign a custom binding adapter for databinding为数据绑定创建自定义绑定适配器
【发布时间】:2018-07-03 13:53:08
【问题描述】:

我正在获取个人资料的 Web 服务,其中我获得的性别为 1- 男性 2- 女性和 3- 不喜欢(参考)。 Web 服务给了我 1, 2, 3 的值。

我正在使用 2-way 数据绑定来设置我编写的自定义绑定适配器,该适配器向我抛出了错误。

这是自定义绑定代码

 @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}

但我没有得到转换价值


FAILURE:构建失败并出现异常。

  • 出了什么问题: 任务 ':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 个是最新的


谁能告诉我为什么我错了

【问题讨论】:

  • 不。你能指导我吗

标签: android android-databinding


【解决方案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}"

【讨论】:

  • 我已更新我的答案以使用 EditText。请测试,如果您有问题,请告诉我。
  • * 出了什么问题:任务 ':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 loc:136:42 - 136:67 ****\ 数据绑定错误 * ***
  • 我已经对它进行了测试,没有任何错误,它运行良好。请使用您的完整 XML 布局代码和您定义 userProfile.xxxx xxxx 的代码更新您的问题,以便我可以更好地帮助您。你确定userProfile.xxxx 返回一个整数吗?
  • 我已经更新了我的答案以使用 TextInputEditText 并经过测试,工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
相关资源
最近更新 更多