OnClick数据绑定在android中不起作用

OnClick数据绑定在android中不起作用,android,data-binding,Android,Data Binding,我有这个类的用户 我正在尝试在android中实现onClick绑定,我还有一个Presenter类 我像这样初始化我的绑定 也在我的XML文件中 我正在设置变量,但编译时出现此错误 您正在通过参数传递一个视图,而您在Presenter类中的方法没有收到它。 要解决此问题,请将方法更改为: public class Presenter{ public void onSaveClick(View view, String task){ Log.i(

我有这个类的用户

我正在尝试在android中实现onClick绑定,我还有一个Presenter类

我像这样初始化我的绑定

也在我的XML文件中

我正在设置变量,但编译时出现此错误

您正在通过参数传递一个
视图,而您在
Presenter
类中的方法没有收到它。 要解决此问题,请将方法更改为:

 public class Presenter{
        public void onSaveClick(View view, String task){
            Log.i("log", "Action" + task)
        }
然后,将其传递到xml中:

android:onClick="@{(v) -> presenter.onSaveClick(v, user.address)}"

您正在通过参数传递一个
视图
,而您在
Presenter
类中的方法没有收到它。 要解决此问题,请将方法更改为:

 public class Presenter{
        public void onSaveClick(View view, String task){
            Log.i("log", "Action" + task)
        }
然后,将其传递到xml中:

android:onClick="@{(v) -> presenter.onSaveClick(v, user.address)}"
或者改变xml

android:onClick=“@{()->presenter.onSaveClick(user.address.get())}”

或演讲者

onSaveClick (ObservableField<String> address){

Log.d ("log", address.get ())
}
onSaveClick(可观察字段地址){
d(“Log”,address.get())
}
更改xml

android:onClick=“@{()->presenter.onSaveClick(user.address.get())}”

或演讲者

onSaveClick (ObservableField<String> address){

Log.d ("log", address.get ())
}
onSaveClick(可观察字段地址){
d(“Log”,address.get())
}
用户型号:

private ObservableField<String> address = new ObservableField<>();

public String getAddress() {
    return address.get();
}

public void setAddress(String address) {
    this.address.set(address);
}
用户模型:

private ObservableField<String> address = new ObservableField<>();

public String getAddress() {
    return address.get();
}

public void setAddress(String address) {
    this.address.set(address);
}


这是因为您对演示者的引用不正确!。错误是在XML中设置变量时键入了错误的包。它实际上与android:onClick无关,而是您引用演示者而不绑定它。在活动中,设置演示者后,必须执行mainBinding.setVariable(BR.presenter,presenter)。在那之后它应该可以正常工作

这是因为您对演示者的引用不正确!。错误是在XML中设置变量时键入了错误的包。它实际上与android:onClick无关,而是您引用演示者而不绑定它。在活动中,设置演示者后,必须执行mainBinding.setVariable(BR.presenter,presenter)。在那之后它应该可以正常工作

没有解决问题,还是一样,为什么要传递那个额外的视图参数我不需要它。对不起。我编辑我的答案。现在检查。您需要传递它,因为onClick处理程序在您的签名中有一个视图。我也这样尝试过,但它不起作用,我做了一个更改,我只传递了v作为参数,并且在我将方法更改为:public void onSaveClick(视图视图)和@{(v)->presenter.onSaveClick(v)后它起作用但是我需要第二个参数,如何使用两个参数您必须将地址字段的类型更改为字符串。无法观察到解决问题它仍然是一样的,为什么要传递那个额外的视图参数我不需要它。对不起,我编辑了我的答案。现在检查。您需要传递它,因为onClick处理程序在您的签名中有一个视图。我也这样尝试过,但它不起作用,我做了一个更改,我只将v作为参数传递,在我将方法更改为:public void onSaveClick(View-View)和@{(v)->presenter.onSaveClick(v)后,它就起作用了但是我需要第二个参数,我如何使用两个参数呢?你必须将地址字段的类型更改为字符串。不可观察你配置gradle文件进行数据绑定吗?User.address不是字符串。相应地更改参数类型我已将其更改为可观察,并且它不工作不,它显示错误:(37,39)在com.example.alternative.mytest.Presenter类中找不到onSaveClick(java.lang.String)方法,即使我实现了如下方法:public void onSaveClick(observeField任务)和:android:onClick=“@{(v)->Presenter.onSaveClick(user.address)}”我认为数据绑定库it本身存在问题,因为我已经尝试直接使用参数字符串,它可以工作,但我需要的只是传递ObservableField,我认为数据绑定库将其识别为字符串NotObservableField请将代码和错误添加为文本(),而不是图像。图像:A)不允许我们复制和粘贴代码/错误以进行测试;B)不允许基于代码/错误内容进行搜索;以及。一般来说,文本格式的代码/错误比作为图像的代码/错误要好得多,这比什么都没有要好。如果有imag,则除了代码格式的文本外,还应使用图像e添加了一些重要的信息,而不仅仅是文本代码/错误。您是否为数据绑定配置了gradle文件?User.address不是一个字符串。相应地更改参数类型我已将其更改为Observable,但它不起作用不,它显示了错误:(37,39)无法在SaveClick(java.lang.string)上找到方法在com.example.alternative.mytest.Presenter类中,甚至我实现了如下内容:public void onSaveClick(observefield任务)和:android:onClick=“@{(v)->Presenter.onSaveClick(user.address)}”我认为数据绑定库it本身存在问题,因为我已经尝试直接使用参数字符串,它可以工作,但我需要的只是传递ObservableField,我认为数据绑定库将其识别为字符串NotObservableField请将代码和错误添加为文本(),而不是图像。图像:A)不允许我们复制和粘贴代码/错误以进行测试;B)不允许基于代码/错误内容进行搜索;以及。一般来说,文本格式的代码/错误比作为图像的代码/错误要好得多,这比什么都没有要好。如果有imag,则除了代码格式的文本外,还应使用图像e添加了一些重要的信息,这些信息并不仅仅通过文本代码/错误来传达。更改为android:onClick=“@{()->presenter.onSaveClick(user.address.get())}”和:public void onSaveClick(String任务){,获取此错误:找不到方法get()在类java.lang.StringAdd-inside data tag in the layout xml and try Againand选项中,更改为android:onClick=“@{()->presenter.onSaveClick(user.address.get())}”和:public void onSaveClick(String任务){,gettin