java - 带有 void 参数的 Android 数据绑定(bind)属性

标签 java android android-databinding

我为数据绑定(bind)创建了一个自定义属性,它不需要任何参数,它所做的只是验证 TextinputEditText,但我想不出在 xml 属性中传递 void 参数的方法。

这不会编译。

绑定(bind)适配器.java

@BindingAdapter("app:validator")
public static void textValidator(TextInputLayout textInputLayout) {

        doesSomething();
}

布局文件.xml

              <android.support.design.widget.TextInputLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:validator="@{ void }">

                 <android.support.design.widget.TextInputEditText
                        android:id="@+id/edit_text"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"" />

                </android.support.design.widget.TextInputLayout>

我试过在 xml 中传递 void 或 null,但它就是无法编译。 我研究发现方法中至少应该有一个或两个值参数。所以我可以通过传递一个参数来让它工作,比方说一个 boolean 值只是为了传递而不是使用它。例如,

这个编译。但这只是一个 hack,请有人提出更好的方法。

绑定(bind)适配器.java

@BindingAdapter("app:validator")
public static void textValidator(TextInputLayout textInputLayout, boolean bl) {

        doesSomething();
}

布局文件.xml

                <android.support.design.widget.TextInputLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:validator="@{ booleanVariable }">

                    <android.support.design.widget.TextInputEditText
                        android:id="@+id/edit_text"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"" />

                </android.support.design.widget.TextInputLayout>

最佳答案

But it's just a hack, someone please suggest a better approach.

没有更好的方法,因为这不是数据绑定(bind)的目的。它的目的是按字面意思绑定(bind)数据,这意味着应该有一些数据(参数)要在 View 中设置,而无需在代码中手动执行。

您尝试执行的操作实际上没有任何意义,因为您的自定义绑定(bind)只会在您传递要绑定(bind)到给定 View 的数据时才会被评估。因此,您最终会得到传递一些虚拟值以触发验证的代码,此时您还不如自己手动触发验证,这比像这样通过数据绑定(bind)间接执行要清晰得多。

如果您想要验证您的 View 以响应另一个 View 上的某些事件,比如“提交按钮”点击或其他东西,那么您可以将事件处理程序绑定(bind)到那个控件,这反过来会调用您的 doesSomething() 方法。查看section on event handling in the data binding documentation为此。

希望对您有所帮助。

关于java - 带有 void 参数的 Android 数据绑定(bind)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48610045/

相关文章:

java - jUnit 和 DateFormat(EclEmma 代码覆盖率)

java - Spring MVC <表单 :select not binding

java - 如何在构建 java 项目期间将 *.class 文件打开为依赖项?

android - 使用 MVVM 架构的 ViewModel 注入(inject)(在 View 内部)

java - 仅沿着已部署的服务在选定的节点上分发分区的 IgniteCache

java - 我如何能够在 fragment 的 ImageView 中显示大量图像?

android - Android 上的 opencv 问题

android - 任务 ':app:transformClassesAndResourcesWithProguardForRelease' 执行失败 -- React Native

android - Activity 不显示 RecyclerView - 数据绑定(bind)

java - Android数据绑定(bind)问题绑定(bind)适配器调用两次