包含视图上的Android onClick()不允许绑定

时间:2019-07-25 12:39:22

标签: java android kotlin mvvm data-binding

我有一个单独的布局,我想调用onClick并在回调中更新字段

<include
    android:onClick="@{() -> viewModel.changeItem(2)}"
    layout="@layout/item"
    app:attr="@{viewModel.title}"
    app:desc="@{viewModel.description}"
    app:active="@{viewModel.isSelected}"
/>

但是它返回以下绑定错误:

  

找不到带有参数的属性“ android:onClick”的设置器   在com.X.databinding.ItemBinding上键入lambda。

但是我可以绑定其他视图

<TextView
    android:onClick="@{() -> viewModel.changeItem(1)}"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
/>

1 个答案:

答案 0 :(得分:0)

我建议您直接从代码中调用onClick。

在.xml中为您的视图设置ID,然后设置以下内容:

val item = findViewById(R.id.your_id) etc.
item.onClick { functionYouWantToCall() }

但是,我不知道是否可以在onClickListener布局上设置ID或include
如果您做不到,只需将include放在LinearLayout内,然后将onClick放在上面即可。

我也曾经在.xml中设置onClicks,但是我认为在代码中进行设置会更有效。
而且,我不知道是否可以在从xml调用的函数中设置参数。