android - 在包含的布局中调用 onClick() 时出错
问题描述
我是数据绑定的新手。当我尝试从 viewModel 调用方法时,我不断收到这个特定错误,
Found data binding errors.
****/ data binding error ****msg:Cannot find the proper callback class for android:onClick. Tried android.view.View but it has 0 abstract methods, should have 1 abstract methods.
file:C:\Projects\myapp\app\src\main\res\layout\content_details.xml
loc:73:27 - 73:69
****\ data binding error ****
我已经从 xml 和活动中解析了“viewModel”变量。它只是行不通。该方法可以从 activity_details.xml 中的文本视图调用,它是包含布局的父级。它完美地工作。该错误仅来自包含的布局。我尝试了其他解决方案,这些解决方案对我不起作用。知道如何解决这个问题吗?
include_layout.xml
`
<?xml version="1.0" encoding="utf-8"?>
<layout >
<data>
<variable
name="viewModel"
type="com.daniel.user.viewmodels.ItemDetailsViewModel"/>
</data>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginTop="@dimen/margin_medium"
android:layout_marginBottom="@dimen/margin_medium"
>
....
<com.varunest.sparkbutton.SparkButton
android:id="@+id/favBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/imageScrollView"
android:layout_alignParentEnd="true"
app:sparkbutton_activeImage="@drawable/heart"
app:sparkbutton_iconSize="30dp"
app:sparkbutton_inActiveImage="@drawable/ic_home_white_24dp"
app:sparkbutton_primaryColor="@color/colorPrimary"
app:sparkbutton_secondaryColor="@color/colorAccent"
android:onClick="@{() -> viewModel.updateItemFavouriteStatus()}"
/>
.....
</RelativeLayout>
</layout> `
这是我的视图模型。
`
public class ItemDetailsViewModel extends BaseViewModel {
public MutableLiveData<ErrorVO> errorVOMutableLiveData = new MutableLiveData<>();
public void updateItemFavouriteStatus() {
errorVOMutableLiveData.setValue(new ErrorVO("Clicked gg", 0));
}
}
`
这是我的活动。
`
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this,R.layout.activity_details);
ButterKnife.bind(this);
viewModel = ViewModelProviders.of(this).get(ItemDetailsViewModel.class);
binding.contentDetails.setVariable(BR.viewModel,viewModel);
binding.setViewModel(viewModel);
}
`
解决方案
问题是您没有将参数 (View v) 放在 updateItemFavouriteStatus 方法上:
public void updateItemFavouriteStatus(View v) {}
推荐阅读
- html-email - Outlook 表格过度扩展导致相邻内容换行
- java - Java - Cannot pull out min value in array
- python - 查找导致我的列成为“对象”类型而不是整数类型的错误数据
- maven - Maven looking for parent Jar instead of Pom in a multi-module project
- kendo-ui - Kendo Grid MVC 不能将列缩小到超出某个限制
- azure - 来自事件中心的数据未填充到 ADX 数据库中
- r - 如何在 R 中创建一个“情节”变量(在每个组中运行一个“for循环”?)
- php - 使用正则表达式在数组中搜索多个字符串
- c# - 这两种序列化对象的通用方法有什么区别?
- c++ - 如何使用 C++ 模板实现 int、string、float 和 date 对象的数组?