【发布时间】:2020-10-22 14:30:33
【问题描述】:
我在RecyclerView的适配器的ViewHolder类中为item添加了OnClickListener和OnLongClickListener
这个想法基本上是,当我想选择一个项目时,我应该第一次长按它,然后我应该做一个正常的短按来选择其他项目
以下是视图持有者的代码,带有长点击和普通点击的接口 接口将由片段的类实现,接口的方法将被覆盖。如代码所示,我根据 MultipleSelectionOn(这是一个布尔变量)在长单击和正常单击 linsener 之间创建了 if 条件。但是,当我长按该项目时,MultipleSelectionOn 变量会更改为 true,但不会执行 onClickListner。
public class DevicesViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener, View.OnClickListener{
LinearLayout device_item_layout;
TextView title,status;
ImageView deleteIcon, selectionBtn;
OnItemClick onItemClick;
OnItemLongClick onItemLongClick;
public DevicesViewHolder(@NonNull View itemView, OnItemClick onItemClick, OnItemLongClick onItemLongClick) {
super(itemView);
device_item_layout = itemView.findViewById(R.id.device_item);
title = itemView.findViewById(R.id.title);
status = itemView.findViewById(R.id.status);
deleteIcon = itemView.findViewById(R.id.deleteIcon);
selectionBtn = itemView.findViewById(R.id.selectionBtn);
this.onItemClick = onItemClick;
this.onItemLongClick = onItemLongClick;
if(MultipleSelectionOn == false) {
itemView.setOnClickListener(null);
itemView.setOnLongClickListener(this);
}else{
itemView.setOnLongClickListener(null);
itemView.setOnClickListener(this);
}
}
@Override
public boolean onLongClick(View view) {
Log.i("MultipleSelectionOn ", String.valueOf(MultipleSelectionOn));
onItemLongClick.onItemLongClick(getAdapterPosition(), view);
MultipleSelectionOn = true;
return true;
}
@Override
public void onClick(View view) {
Log.i("MultipleSelectionOn ", String.valueOf(MultipleSelectionOn));
onItemClick.onItemClick(getAdapterPosition(), view);
}
}
public interface OnItemLongClick{
void onItemLongClick(int position, View view);
}
public interface OnItemClick{
void onItemClick(int position, View view);
}
【问题讨论】:
标签: android events android-recyclerview onclicklistener onlongclicklistener