Android数据绑定将带有lambda表达式的onClick传递给onClick

时间:2017-04-15 21:10:09

标签: android data-binding lambda android-databinding

我有一个带有图像的imageView,我想用这张图片打开全屏活动。

<layout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
    <variable
            name="obj"
            type="...ViewObjectImage">
    </variable>
    <variable
            name="handler"
            type="...Handlers">
    </variable>
</data>
<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >

    <android.support.v7.widget.CardView
            ...
        <ImageView
               ...
                app:progressbar="@{progressBar}"
                app:imageUrl="@{obj.url}"
                android:onClick="@{(v) -> handler.openFullScreen(v, obj.url)}"
                android:clickable="true"

我的处理程序类

 public void openFullScreen(View view, String url){
    Context context = view.getContext();
    Intent intent = new Intent(context, FullScreenSingleImageActivity.class);
    intent.putExtra("image_url", url);
    context.startActivity(intent);
}

但是当我点击ImageView时没有任何反应。我怎样才能以正确的方式传递第二个带有lambda表达式的参数?

2 个答案:

答案 0 :(得分:0)

将图片视图添加到布局广告设置布局参数以填充屏幕

答案 1 :(得分:-1)

我有这个问题,因为recyclerview包含不同的布局(多视图类型)。并且所有布局都使用数据绑定。我只为活动中的布局设置了处理程序。当我将适配器中的处理程序设置为recyclerview

中的所有布局时,问题就解决了
@Override
public void onBindViewHolder(CommonViewHolder holder, int position) {
    Object object = getObjForPosition(position);
    holder.bind(object);
    holder.binding.setVariable(BR.handler, mHandlers);
}