为RecyclerView添加优雅的点击事件、长按事件
2017-09-06 12:44
288 查看
本篇参考:Hugo的文章-Getting your clicks on RecyclerView
效果如下
res -> values -> ids.xml ->
效果如下
一、完整的点击、长按事件支持类
先要准备一份resources
res -> values -> ids.xml ->
<?xml version="1.0" encoding="utf-8"?> <resources> <item name="item_click_support" type="id" /> </resources>
// 2. 具体的支持类 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); } }
二、使用方式
可在setAdapter()之后调用
// 点击 ItemClickSupport.addTo(rv).setOnItemClickListener(new ItemClickSupport.OnItemClickListener() { @Override public void onItemClicked(RecyclerView recyclerView, int position, View v) { Toast.makeText(MainActivity.this, mDatas.get(position), Toast.LENGTH_SHORT).show(); } }); // 长按 ItemClickSupport.addTo(rv).setOnItemLongClickListener(new ItemClickSupport.OnItemLongClickListener() { @Override public boolean onItemLongClicked(RecyclerView recyclerView, int position, View v) { Toast.makeText(MainActivity.this, "长按" + mDatas.get(position) + "已删除", Toast.LENGTH_SHORT).show(); // 需要自己处理position在集合中的位置(需考虑头、身、脚布局数量) mDatas.remove(position); if (lastVisible + 1 == mAdapter.getItemCount()) { addmore(); } mAdapter.notifyItemRemoved(position); // 消耗事件 return true; } });
相关文章推荐
- 给RecyclerView的item添加点击监听事件
- TV中RecyclerView添加item的点击事件和删除item之后获取焦点解决
- 为RecyclerView添加item的点击事件
- Android 高级UI设计笔记20:RecyclerView 的详解之RecyclerView添加Item点击事件
- 给recyclerview的item添加点击事件的 一种方法
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加item的点击事件
- 为RecyclerView添加点击事件、长按事件
- Android RecyclerView使用(二) -给Item添加点击事件
- RecyclerView 添加头部和尾部,并实现Item的点击事件
- Recyclerview添加头布局和尾布局、item点击事件详解
- Android RecyclerView给Item添加点击事件
- Android中Recyclerview使用6----添加条目得到点击事件和长按事件(另一种写法,较简单)
- 为RecyclerView添加item的点击事件
- Android中为RecyclerView添加item的点击事件
- Recyclerview添加点击事件和长按事件
- 为RecyclerView添加item的点击事件
- RecyclerView的点击事件添加-------接口回调的形式添加
- 为RecyclerView添加item的点击事件