我正在关注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时,我无法找到任何其他错误来源。
感谢。
答案 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;
}
}
然后你的点击就可以了。希望它会对你有所帮助。