Я добавил OnClickListener и OnLongClickListener для элемента в классе ViewHolder адаптера RecyclerView.
Идея заключается в том, что когда я хочу выбрать элемент, я должен долго щелкнуть по нему в первый раз, а затем сделать обычный короткий щелчок, чтобы выбрать другие элементы.
Ниже приведен код держателя представления с интерфейсами для длинного щелчка и обычного щелчка. Интерфейсы будут реализованы классом фрагмента, а метод интерфейсов будет переопределен. Как видно из кода, я создаю условие if, которое изменяется между длинным щелчком и обычным щелчком мыши в соответствии с MultipleSelectionOn (это логическая переменная). Однако, когда я нажимаю длинный щелчок по элементу, переменная 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);
}