Data binding Error:(421, 17) error: variable xyzViewHand is already defined in method _internalCallbackOnClick(int,View)

Data binding Error:(421, 17) error: variable xyzViewHand is already defined in method _internalCallbackOnClick(int,View)

XyzFragment.java

public class XyzFragment extends Fragment implements XyzViewHandler {

    FragmentXyzBinding fragmentXyzbinding;
    XyzModel xyzModel;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        fragmentXyzbinding= DataBindingUtil.inflate(inflater, R.layout.fragment_xyz, container, false);
        fragmentXyzbinding.setXyzViewHandler(this);
        xyzModel = new XyzModel();
        fragmentXyzbinding.setXyzModel(xyzModel);
        return fragmentXyzbinding.getRoot();
    }
}

fragment_xyz.xml

    <layout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto">

            <data>

                <variable
                    name="xyzModel"
                    type="com.android.xyzModel" />

                <variable
                    name="xyzViewHandler"
                    type="com.android.XyzViewHandler" />
            </data>

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@drawable/login_bg">

    <RelativeLayout
            android:layout_width="match_parent"
             android:layout_height="match_parent">

    <EditText
           android:id="@+id/edtFirstName"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_marginLeft="@dimen/eight_margin"
           android:backgroundTint="@color/colorDivider"
           android:hint="@string/first_name"
           android:inputType="textPersonName"
           android:text="@={xyzModel.firstName}"
           android:textColor="@color/colorPrimaryText" />

   <Button
          android:id="@+id/btnRegister"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:onClick="@{() -> xyzViewHandler.onRegisterClick(xyzModel)}"
          android:text="@string/register"
          android:textStyle="bold" />

    </RelativeLayout>

 </FrameLayout>
</layout>

XyzViewHandler.java

public interface XyzViewHandler{

    public void onRegisterClick(XyzModel xyzModel);
}

XyzModel.java

public class XyzModel {

    String firstName;

public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
}

这是我的 two way data binding 代码,片段相同的代码在 activity 上工作正常,但如果在 fragment 上工作,当我写我的 fragment_xyz.xml 按钮时它会出错点击赞 -

<Button
          android:id="@+id/btnRegister"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:onClick="@{XyzViewHandler.onRegisterClick}"
          android:text="@string/register"
          android:textStyle="bold" />

XyzViewHandler.java

public interface XyzViewHandler{

    public void onRegisterClick(View view);
}

它也适用于片段,但是当我在 xml 文件中添加 Lambda 表达式时,就像上面的代码一样,在 FragmentXyzBinding.java auto created class of [=23] 中给出错误=]

    Error:(421, 17) error: variable xyzViewHand is already defined in method _internalCallbackOnClick(int,View)
    Error:(425, 55) error: incompatible types: boolean cannot be converted to XyzViewHandler
    Error:(426, 13) error: incompatible types: XyzViewHandler cannot be converted to boolean
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

FragmentXyzBinding.java

// callback impls
    public final void _internalCallbackOnClick(int sourceId , android.view.View callbackArg_0) {
        // localize variables for thread safety
        // XyzViewHandler != null
        boolean xyzViewHa = false;
        // XyzModel
        com.android.XyzModel xyzModel = mXyzModel;
        // XyzViewHandler
        com.android.XyzViewHandler xyzViewHa = mXyzViewH;

        xyzViewHa = (xyzViewHa) != (null);
        if (xyzViewHa) {
            xyzViewHa.onRegisterClick(xyzModel);
        }
    }

这里似乎 boolean xyzViewHaViewHandler refrense xyzViewHa 都具有相同的名称,因此会发生错误,但相同的代码与 Activity 一起工作良好并且我看到生成的布尔值类似于 xyzViewha0

@可惜我有同样的错误,正如你所说的原因是"boolean xyzViewHa and ViewHandler refrense xyzViewHa both are with same name ", 所以我将变量名更改为布局中的任意名称,例如

<variable
     name="handleXy"
     type="com.android.XyzViewHandler" /> 

并且构建成功。可能这是数据绑定库中的错误。

如@Debanjan 所说,将变量名称更改为其他名称

1) 在你的布局文件中

<variable
    name="handleXy"
    type="com.android.XyzViewHandler" />

android:onClick="@{() -> handleXy.onRegisterClick(xyzModel)}"

2) 在你的 java 文件中

例如。对我来说,是数据绑定,所以我不得不用

这样的方法重命名
_viewDataBinding.setVariable(BR.handleXy, _callback);

(这不是你的情况,但可能对其他人有用)

3)删除(或剪切)FragmentXyzBinding.java中有问题的方法,并保存

4)重建。

这就是我解决问题的方式,可以再次重建我的项目。 这是一个可怕的错误。