RecyclerView(一)点击事件的两种方式
2017-01-13 18:36
891 查看
recyclerview自身不带有点击事件的回调,以下实现recyclerview点击事件的两种方式
1、首先定义点击的接口
3、在activity中使用
2、将我们的布局中定义recyclerview添加方法 addOnItemTouchListener()
1、通过接口回调的方式:
直接上代码加注释1、首先定义点击的接口
public interface OnItemClickListener { void onItemClick(View view, int position); }
2、在recyclerview的adapter中实现点击方法
public class ListRecycleViewAdapter extends RecyclerView.Adapter<ListRecycleViewAdapter.ListViewHolder>{ private Context mContext; private List<String> mList; public ListRecycleViewAdapter(Context context, List<String> list) { mContext = context; mList = list; } @Override public ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ListViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_list_recycle_view, parent, false)); } @Override public void onBindViewHolder(final ListViewHolder holder, int position) { holder.tv.setText(mList.get(position)); View itemView = ((RelativeLayout) holder.itemView).getChildAt(0); if (mOnItemClickListener != null) { itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = holder.getLayoutPosition(); mOnItemClickListener.onItemClick(holder.itemView, position); } }); } } @Override public int getItemCount() { return mList.size(); } private OnItemClickListener mOnItemClickListener;//声明接口 public void setOnItemClickListener(OnItemClickListener onItemClickListener) { mOnItemClickListener = onItemClickListener; } class ListViewHolder extends RecyclerView.ViewHolder { TextView tv; public ListViewHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv_list_item); } } }
3、在activity中使用
ListRecycleViewAdapter listRecycleViewAdapter = new ListRecycleViewAdapter(SettingActivity.this, mList); listRecycleViewAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(View view, int position) { } }
2,通过recyclerview的addOnItemTouchListener实现点击事件
1、首先定义类RecyclerItemClickListener实现 RecyclerView.OnItemTouchListener接口,重写onLongPress()方法,onInterceptTouchEvent()方法,onTouchEvent()方法,onRequestDisallowInterceptTouchEvent()方法,并在本类内部定义一个点击监听的接口interface OnItemClickListener,接口内部设置两个方法onItemClick(),onLongClick()。下面上代码:
public static class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { GestureDetector mGestureDetector; private View childView; private RecyclerView touchView; public RecyclerItemClickListener(Context context, final HomePageFragment.RecyclerItemClickListener.OnItemClickListener mListener) { mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent ev) { if (childView != null && mListener != null) { mListener.onItemClick(childView, touchView.getChildPosition(childView)); } return true; } @Override public void onLongPress(MotionEvent ev) { if (childView != null && mListener != null) { mListener.onLongClick(childView, touchView.getChildPosition(childView)); } } }); } public interface OnItemClickListener { void onItemClick(View view, int position); void onLongClick(View view, int posotion); } @Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { mGestureDetector.onTouchEvent(e); childView = rv.findChildViewUnder(e.getX(), e.getY()); touchView = rv; return false; } @Override public void onTouchEvent(RecyclerView rv, MotionEvent e) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } }
2、将我们的布局中定义recyclerview添加方法 addOnItemTouchListener()
rc_view.addOnItemTouchListener(new RecyclerItemClickListener(this,new RecyclerItemClickListener.OnItemClickListener() { public void onItemClick(View view, int position) { //在此处做点击之后的逻辑处理 } @Override public void onLongClick(View view, int position) { //在此处做长按之后的逻辑处理 // Toast.makeText(getContext(), "长按", Toast.LENGTH_SHORT).show(); } }
相关文章推荐
- RecyclerView点击事件OnItemClick的两种实现方式
- android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理
- RecyclerView的item点击事件(点击和长按)的两种实现
- cocos2dx中精灵点击事件处理的两种方式——Sprite和ImageView
- [Android | Material Design] RecyclerView Item点击事件 添加水波纹效果 两种办法
- android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理
- RecycleView设置点击的两种方式:adapter中的onBindViewHolder(VH,int)方法中进行;实现RecyclerView的addonItemTouchListerner()
- 两种方式处理ViewPager点击事件
- 为RecyclerView打造万能适配器,点击事件,5.0水波纹点击效果
- 【Android 界面效果48】Android-RecyclerView-Item点击事件设置
- 横竖屏事件响应(viewWillLayoutSubviews和通知)两种方式
- RecyclerView Item 的点击事件
- android RecyclerView响应点击事件(二)
- RecyclerView 初次体验,实现增加删除条目及item长按和点击事件
- RecyclerView 使用总结(三):点击事件、GridView等、瀑布流、动态增删
- 【Android】RecyclerView的OnItemClickListener点击事件处理
- RecyclerView点击事件
- RecyclerView点击事件、加载不同布局
- 横竖屏事件响应(viewWillLayoutSubviews和通知)两种方式
- RecyclerView 点击事件