使用数据绑定和MVVM处理onClick事件

时间:2019-02-05 11:44:57

标签: android mvvm data-binding

我想使用数据绑定 ImageView 上设置 onClickListener ,并通过 ViewModel(MVVM)对其进行控制

在xml布局中,我使用数据绑定实现的所有功能均有效。但是 onClick 事件不起作用。

我收到此错误:"error:cannot find symbol"

XML:

       <data>
    <variable
            name="photo"
            type="learn.app.papewall.model.Photo" />
    <variable
            name="viewModelDetail"
            type="learn.app.papewall.view.detail.DetailViewModel" />
</data>
   <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         tools:context=".view.detail.DetailFragment">

<ImageView android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:id="@+id/image"
           android:scaleType="center"
           android:onClick="@{viewModelDetail.save()}"
           app:imageUrl="@{photo.urls.regular}"/>
<TextView
        android:id="@+id/detailUsername"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/padding_large"
        android:textColor="#000"
        android:layout_alignBottom="@+id/image"
        android:text="@{photo.user.name}"/>
   </RelativeLayout>

ViewModel

fun save(photo: Photo){
    setWallpaper(photo, false)
}

片段:

viewModel.save(photoObj!!)

我不知道这是什么错误。我尝试了 stackoverflow 的解决方案,但没有一个解决了我的问题。

我想使用数据绑定 MVVM 设置 onClick 侦听器,我不知道这是什么问题,不胜感激。< / p>

2 个答案:

答案 0 :(得分:0)

您需要将照片传递给save功能,

android:onClick="@{() -> viewModelDetail.save(photo)}"

答案 1 :(得分:0)

您还可以尝试如下修改点击: android:onClick =“ @ {()-> viewModelDetail.save(photo)}”