Item Click Listeners
suggest changeTo implement an item click listener and/or an item long click listener, you can create an interface in your adapter:
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> { public interface OnItemClickListener { void onItemSeleted(int position, View view, CustomObject object); } public interface OnItemLongClickListener { boolean onItemSelected(int position, View view, CustomObject object); } public final class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View itemView) { super(itemView); final int position = getAdapterPosition(); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(mOnItemClickListener != null) { mOnItemClickListener.onItemSeleted(position, view, mDataSet.get(position)); } } }); itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { if(mOnItemLongClickListener != null) { return mOnItemLongClickListener.onItemSelected(position, view, mDataSet.get(position)); } } }); } } private List<CustomObject> mDataSet; private OnItemClickListener mOnItemClickListener; private OnItemLongClickListener mOnItemLongClickListener; public CustomAdapter(List<CustomObject> dataSet) { mDataSet = dataSet; } @Override public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.view_item_custom, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(CustomAdapter.ViewHolder holder, int position) { // Bind views } @Override public int getItemCount() { return mDataSet.size(); } public void setOnItemClickListener(OnItemClickListener listener) { mOnItemClickListener = listener; } public void setOnItemLongClickListener(OnItemLongClickListener listener) { mOnItemLongClickListener = listener; } }
Then you can set your click listeners after you create an instance of the adapter:
customAdapter.setOnItemClickListener(new CustomAdapter.OnItemClickListener { @Override public void onItemSelected(int position, View view, CustomObject object) { // Your implementation here } }); customAdapter.setOnItemLongClickListener(new CustomAdapter.OnItemLongClickListener { @Override public boolean onItemSelected(int position, View view, CustomObject object) { // Your implementation here return true; } });
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents