绑定事件未在适配器上触发

时间:2017-12-19 03:57:24

标签: android android-layout android-recyclerview android-databinding android-architecture-components

我正在关注Android Archt。 component建立一个项目。按照这些指导原则,我创建了一个名为CataloguesAdapter的自定义适配器,将DataBoundListAdapter扩展为:

public class CataloguesAdapter extends DataBoundListAdapter<CatalogueEntity, CatalogueItemBinding> {

    private final android.databinding.DataBindingComponent dataBindingComponent;
    private final ContributorClickCallback callback;
    private CatalogueItemBinding mBinding;

    public CataloguesAdapter(DataBindingComponent dataBindingComponent,
                             ContributorClickCallback callback) {
        this.dataBindingComponent = dataBindingComponent;
        this.callback = callback;
    }

    @Override
    protected CatalogueItemBinding createBinding(ViewGroup parent) {
        mBinding = DataBindingUtil
                .inflate(LayoutInflater.from(parent.getContext()),
                        R.layout.catalogue_item, parent, false,
                        dataBindingComponent);

       //while this click event is working fine
        mBinding.getRoot().setOnClickListener(v -> {
            CatalogueEntity catalogueEntity = mBinding.getCatalogue();
            if (catalogueEntity != null && callback != null) {
                callback.onClick(catalogueEntity);
            }
        });

        //todo:not working, this event is not firing
        mBinding.deleteIcon.setOnClickListener(v-> callback.onItemDelete());

        return mBinding;
    }
}

我正在实施滑动以删除Recycler视图项目上的布局。下面是列表项的XML布局:

 <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

        <variable
            name="catalogue"
            type="com.mindtree.igxbridge.traderapp.datasource.local.entity.CatalogueEntity" />

    </data>

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:cardUseCompatPadding="true">

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <RelativeLayout
                android:id="@+id/view_background"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/colorRed">

                <ImageView
                    android:id="@+id/delete_icon"
                    android:layout_width="@dimen/dimen_30_dp"
                    android:layout_height="@dimen/dimen_30_dp"
                    android:layout_alignParentEnd="true"
                    android:layout_centerVertical="true"
                    android:layout_marginEnd="@dimen/dimen_10_dp"
                    app:srcCompat="@drawable/ic_delete"/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginEnd="@dimen/dimen_10_dp"
                    android:layout_toStartOf="@id/delete_icon"
                    android:text="@string/text_delete"
                    android:textColor="@color/Material.87.white"
                    android:textSize="14sp" />

            </RelativeLayout>

            <RelativeLayout
                android:id="@+id/view_foreground"
                android:layout_width="match_parent"
                android:background="#FFFFFF"
                android:layout_height="wrap_content">

                <android.support.v7.widget.AppCompatImageView
                    android:id="@+id/arrow_icon"
                    android:layout_width="@dimen/dimen_30_dp"
                    android:layout_height="@dimen/dimen_30_dp"
                    android:layout_alignParentEnd="true"
                    android:layout_centerVertical="true"
                    android:layout_marginEnd="@dimen/dimen_10_dp"
                    app:srcCompat="@drawable/ic_arrow_right" />               

            </RelativeLayout>

        </FrameLayout>

    </android.support.v7.widget.CardView>
</layout>

左/右滑动等其他操作工作正常,但未点击“删除”按钮事件。

我尝试检查findViewbyId并注册点击事件,但也没有运气。 正确注册CatalogueItemBinding时,我无法找到任何其他错误来源。

感谢。

2 个答案:

答案 0 :(得分:0)

如果我误解了你的代码,请纠正我。您使用 FrameLayout 来托管彼此相对的两个相对布局(前景和背景)。删除按钮位于后台,前景的width属性中包含 match_parent 。因此,我认为删除按钮被前景覆盖,导致“未触发事件”。

可能的解决方案

尝试在前台合并删除按钮。将UI组件放在前面是有意义的。

答案 1 :(得分:0)

我认为你忘了告诉你的适配器类你的XML设置在哪里,而不是适配器类。只需在XML中创建一个可以导入适配器类的变量。

 <variable
     name="myAdapter" 
     type="import your adapter class">
 </variable>

现在将此变量设置为适配器。

 @Override
    protected CatalogueItemBinding createBinding(ViewGroup parent) {
        mBinding = DataBindingUtil
                .inflate(LayoutInflater.from(parent.getContext()),
                        R.layout.catalogue_item, parent, false,
                        dataBindingComponent);
        mBinding .setmyAdapter(this);      
        return mBinding;
    }
}

然后你的点击就可以了。希望它会对你有所帮助。