给RecyclerView的item加OnClickListener
ItemClickSupport.addTo(mRecyclerView).setOnItemClickListener(new ItemClickSupport.OnItemClickListener() {
@Override
public void onItemClicked\(RecyclerView recyclerView, int position, View v\) {
// do it
}
});
public class ItemClickSupport {
private final RecyclerView mRecyclerView;
private OnItemClickListener mOnItemClickListener;
private OnItemLongClickListener mOnItemLongClickListener;
private View.OnClickListener mOnClickListener = new View.OnClickListener\(\) {
@Override
public void onClick\(View v\) {
if \(mOnItemClickListener != null\) {
RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder\(v\);
mOnItemClickListener.onItemClicked\(mRecyclerView, holder.getAdapterPosition\(\), v\);
}
}
};
private View.OnLongClickListener mOnLongClickListener = new View.OnLongClickListener\(\) {
@Override
public boolean onLongClick\(View v\) {
if \(mOnItemLongClickListener != null\) {
RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder\(v\);
return mOnItemLongClickListener.onItemLongClicked\(mRecyclerView, holder.getAdapterPosition\(\), v\);
}
return false;
}
};
private RecyclerView.OnChildAttachStateChangeListener mAttachListener
= new RecyclerView.OnChildAttachStateChangeListener\(\) {
@Override
public void onChildViewAttachedToWindow\(View view\) {
if \(mOnItemClickListener != null\) {
view.setOnClickListener\(mOnClickListener\);
}
if \(mOnItemLongClickListener != null\) {
view.setOnLongClickListener\(mOnLongClickListener\);
}
}
@Override
public void onChildViewDetachedFromWindow\(View view\) {
}
};
private ItemClickSupport\(RecyclerView recyclerView\) {
mRecyclerView = recyclerView;
mRecyclerView.setTag\(R.id.item\_click\_support, this\);
mRecyclerView.addOnChildAttachStateChangeListener\(mAttachListener\);
}
public static ItemClickSupport addTo\(RecyclerView view\) {
ItemClickSupport support = \(ItemClickSupport\) view.getTag\(R.id.item\_click\_support\);
if \(support == null\) {
support = new ItemClickSupport\(view\);
}
return support;
}
public static ItemClickSupport removeFrom\(RecyclerView view\) {
ItemClickSupport support = \(ItemClickSupport\) view.getTag\(R.id.item\_click\_support\);
if \(support != null\) {
support.detach\(view\);
}
return support;
}
public ItemClickSupport setOnItemClickListener\(OnItemClickListener listener\) {
mOnItemClickListener = listener;
return this;
}
public ItemClickSupport setOnItemLongClickListener\(OnItemLongClickListener listener\) {
mOnItemLongClickListener = listener;
return this;
}
private void detach\(RecyclerView view\) {
view.removeOnChildAttachStateChangeListener\(mAttachListener\);
view.setTag\(R.id.item\_click\_support, null\);
}
public interface OnItemClickListener {
void onItemClicked\(RecyclerView recyclerView, int position, View v\);
}
public interface OnItemLongClickListener {
boolean onItemLongClicked\(RecyclerView recyclerView, int position, View v\);
}
}
ref: https://www.littlerobots.nl/blog/Handle-Android-RecyclerView-Clicks/