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 xyzViewHa
和 ViewHandler 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)重建。
这就是我解决问题的方式,可以再次重建我的项目。
这是一个可怕的错误。
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 xyzViewHa
和 ViewHandler 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)重建。
这就是我解决问题的方式,可以再次重建我的项目。 这是一个可怕的错误。