支持setOnItemClickListener的RecyclerView
来源:互联网 发布:rimworld mac下载 编辑:程序博客网 时间:2024/05/17 02:14
RecyclerView没有提供像ListView一样的setOnItemClickListener,那么想要让RecyclerView也提供一个setOnItemClickListener方法,那我们就只有自己来实现。
下面代码是参考鸿洋的一篇博客来实现的支持setOnItemClickListener的RecyclerView
import android.content.Context;import android.support.annotation.Nullable;import android.support.v4.view.GestureDetectorCompat;import android.support.v7.widget.RecyclerView;import android.util.AttributeSet;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;public class RecyclerViewExt extends RecyclerView {public RecyclerViewExt(Context context) {this(context, null);}public RecyclerViewExt(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0);}public RecyclerViewExt(Context context, @Nullable AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}private OnItemClickListener mItemClickListener;public OnItemClickListener getOnItemClickListener() {return mItemClickListener;}public void setOnItemClickListener(OnItemClickListener itemClickListener) {mItemClickListener = itemClickListener;removeOnItemTouchListener(mOnRecyclerViewItemClickListener);addOnItemTouchListener(mOnRecyclerViewItemClickListener);}public interface OnItemClickListener {public void onItemClick(RecyclerView.ViewHolder vh, int position);public void onItemLongClick(RecyclerView.ViewHolder vh, int position);}private OnRecyclerViewItemClickListener mOnRecyclerViewItemClickListener = new OnRecyclerViewItemClickListener(this);private class OnRecyclerViewItemClickListener implementsRecyclerView.OnItemTouchListener {private RecyclerView mRecyclerView;private GestureDetectorCompat mGestureDetectorCompat;public OnRecyclerViewItemClickListener(RecyclerView recyclerView) {mRecyclerView = recyclerView;mGestureDetectorCompat = new GestureDetectorCompat(recyclerView.getContext(),new ItemTouchGestureDetectorListener());}@Overridepublic boolean onInterceptTouchEvent(RecyclerView recyclerView,MotionEvent motionEvent) {mGestureDetectorCompat.onTouchEvent(motionEvent);return false;}@Overridepublic void onTouchEvent(RecyclerView recyclerView,MotionEvent motionEvent) {mGestureDetectorCompat.onTouchEvent(motionEvent);}private class ItemTouchGestureDetectorListener extendsGestureDetector.SimpleOnGestureListener {@Overridepublic boolean onSingleTapUp(MotionEvent e) {if (mItemClickListener == null) {return false;}View clickedChild = mRecyclerView.findChildViewUnder(e.getX(), e.getY());if (clickedChild != null) {RecyclerView.ViewHolder vh = mRecyclerView.getChildViewHolder(clickedChild);if (vh != null) {mItemClickListener.onItemClick(vh, vh.getAdapterPosition());}}return true;}@Overridepublic void onLongPress(MotionEvent e) {if (mItemClickListener == null) {return;}View clickedChild = mRecyclerView.findChildViewUnder(e.getX(), e.getY());if (clickedChild != null) {RecyclerView.ViewHolder vh = mRecyclerView .getChildViewHolder(clickedChild);if (vh != null) {mItemClickListener.onItemLongClick(vh, vh.getAdapterPosition());}}}}}}
mRecyclerView.setOnItemClickListener(new RecyclerViewExt.OnItemClickListener() {@Overridepublic void onItemLongClick(ViewHolder vh, int position) {// Do something}@Overridepublic void onItemClick(ViewHolder vh, int position) {// Do something}});
0 0
- 支持setOnItemClickListener的RecyclerView
- 可以添加头部和尾部View并且支持setOnItemClickListener和滑到底部自动加载更多的RecyclerView
- Spinnner 的 setOnItemClickListener异常
- setOnItemClickListener
- 支持RecyclerView的CursorAdapter的RecyclerViewCursorAdapter
- ListView.setOnItemClickListener不起作用的原因
- 自定义高效支持点击监听的RecyclerView
- 支持下拉加载刷新的RecyclerView
- 支持scrolllistener和scrollTo的RecyclerView
- 支持设置数据为空时打底view的RecyclerView+支持RecyclerView的CursorAdapter
- ListView的setOnItemClickListener不生效的解决办法
- ListView.setOnItemClickListener无效问题的解决
- ListView setOnItemClickListener没有效果的解决
- ListView.setOnItemClickListener无效问题的解决
- ListView的setOnItemClickListener点击无效问题
- AdapterView 的setOnItemClickListener 与子view setOnclick。
- AdapterView 的setOnItemClickListener 与子view setOnclick。
- android ListView不能相应setOnItemClickListener的问题
- 毕向东Java视频学习笔记【day08-继承】
- subversion的三种外挂系统
- JavaScript Promise
- JavaScript tips
- PHP实现文件上传的例子(附详细源码)
- 支持setOnItemClickListener的RecyclerView
- 上帝造题的七分钟 [Tyvj 1716]
- BASISI系统中如何配置web service
- think in java笔记:this关键字
- 获取当前url地址和目录不包含访问的文件名
- 最左原位
- ehcache.xml配置文件详解
- listview.setselection(position)不起作用
- Android网络相关(WiFi的开关,WiFi热点的开关,获取手机IP地址等)