package com.example.adapter; import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.TextView; import com.bignerdranch.android.multiselector.MultiSelector; import com.bignerdranch.android.multiselector.SwappingHolder; import com.example.ExampleApplication; import com.example.R; import com.example.entity.ProductEntity; public class MultiSelectorRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private MultiSelector mMultiSelector = new MultiSelector(); // TODO: use MultiSelector or SingleSelector public static final class ProductViewHolder extends SwappingHolder implements View.OnClickListener, View.OnLongClickListener { private TextView mNameTextView; private OnItemClickListener mListener; private MultiSelector mMultiSelector; public interface OnItemClickListener { void onItemClick(View view, int position, long id, int viewType); void onItemLongClick(View view, int position, long id, int viewType); } public ProductViewHolder(View itemView, OnItemClickListener listener, MultiSelector multiSelector) { super(itemView, multiSelector); mListener = listener; mMultiSelector = multiSelector; // set background setSelectionModeBackgroundDrawable(ContextCompat.getDrawable(ExampleApplication.getContext(), R.drawable.selector_selectable_item_bg)); // set listener itemView.setOnClickListener(this); itemView.setOnLongClickListener(this); // find views mNameTextView = (TextView) itemView.findViewById(R.id.fragment_recycler_item_name); } @Override public void onClick(View view) { if(!mMultiSelector.tapSelection(this)) { int position = getAdapterPosition(); if(position != RecyclerView.NO_POSITION) { mListener.onItemClick(view, position, getItemId(), getItemViewType()); } } } @Override public boolean onLongClick(View view) { if(!mMultiSelector.isSelectable()) { mMultiSelector.setSelectable(true); mMultiSelector.setSelected(this, true); } else { int position = getAdapterPosition(); if(position != RecyclerView.NO_POSITION) { mListener.onItemLongClick(view, position, getItemId(), getItemViewType()); } } return true; } public void bindData(ProductEntity product) { mNameTextView.setText(product.getName()); } } }