我是数据绑定的新手。当我尝试从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中的文本视图中调用该方法,该视图是所包含布局的父级。该错误仅来自包含的布局。
我尝试了其他解决方案,但这些解决方案对我不起作用。
知道如何解决这个问题吗?
included_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> `
这是我的ViewModel。
`
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);
}
`
答案 0 :(得分:0)
问题是您没有将参数(View v)放在updateItemFavouriteStatus方法上:
public void updateItemFavouriteStatus(View v) {}