我有一个RecyclerView,每个项目都有一个自定义视图。这个自定义视图只包含一个收藏的ImageView。我在我的holder类中设置onclick,如下所示:
class DataViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private OnItemViewClickListener onItemViewClickListener;
private OnFavoriteImageViewClickListener onFavoriteImageViewClickListener;
private ImageView favoriteImageView;
DataViewHolder(View itemView, OnItemViewClickListener onItemViewClickListener,
OnFavoriteImageViewClickListener onFavoriteImageViewClickListener) {
super(itemView);
this.onItemViewClickListener = onItemViewClickListener;
itemView.setOnClickListener(this);
favoriteImageView = itemView.findViewById(R.id.favorite_image_view);
this.onFavoriteImageViewClickListener = onFavoriteImageViewClickListener;
favoriteImageView.setOnClickListener(this);
}
void bindData(Data data) {
//Bind data to views
}
@Override
public void onClick(View v) {
int position = getAdapterPosition();
Data clickedData = getItem(position);
onItemViewClickListener.onItemViewClick(clickedData);
onFavoriteImageViewClickListener.onFavoriteImageViewClick(clickedData);
}
}
public interface OnItemViewClickListener {
void onItemViewClick(Data data);
}
public interface OnFavoriteImageViewClickListener {
void onFavoriteImageViewClick(Data data);
}如您所见,我在整个视图和图像视图上分别设置了一次单击侦听器。问题是,当我单击ImageView时,两个单击事件都会触发,一个是整个视图,另一个是ImageView。是否停止第一个(在整个视图上)并只保留ImageView中的一个?谢谢!
发布于 2019-07-09 00:46:46
您可以通过计算View的id属性来找出单击了哪个View.getId(),另请参阅View.getId()
@Override
public void onClick(View view) {
int position = getAdapterPosition();
Data clickedData = getItem(position);
int id = view.getId();
if (id == R.id.favorite_image_view){
onFavoriteImageViewClickListener.onFavoriteImageViewClick(clickedData)
}
else {
onItemViewClickListener.onItemViewClick(clickedData);
}
}https://stackoverflow.com/questions/56938811
复制相似问题