<十>RecycleView点击事件
2016-03-05 13:44
330 查看
最终目的
模拟ListView的setOnItemClickListener()方法,调用者只须调用类似于setOnItemClickListener的东西就能获得被点击item的相关数据。原理
为RecyclerView的每个子item设置setOnClickListener,然后在onClick中再调用一次对外封装的接口,将这个事件传递给外面的调用者。而“为RecyclerView的每个子item设置setOnClickListener”在Adapter中设置。其实直接在onClick中也能完全处理item的点击事件,但是这样会破坏代码的逻辑。步骤
1.自定义的MyAdapter中实现OnItemClickListener接口,复写onClick处理item内控件的点击事件2.在MyAdapter中定义接口(OnRecycleViewItemClickListener),模拟ListView的OnItemClickListener:
以上两步的代码:
@Override public void onClick(View v) { if (onRecyclerViewItemClickListener!= null){ //注意这里使用getTag方法获取数据 onRecyclerViewItemClickListener .onRecycleViewItemClick(v,Integer. parseInt(v.getTag().toString())) ; } } public interface OnRecyclerViewItemClickListener { void onRecycleViewItemClick(View view , int position); } public OnRecyclerViewItemClickListener getOnRecyclerViewItemClickListener () { return onRecyclerViewItemClickListener; } public void setOnRecyclerViewItemClickListener (OnRecyclerViewItemClickListener onRecyclerViewItemClickListener) { this .onRecyclerViewItemClickListener = onRecyclerViewItemClickListener; }
同时记得声明一个OnRecycleViewItemClickListener的变量:
private OnRecyclerViewItemClickListener onRecyclerViewItemClickListener ;
3.接下来就是为Item内部具体控件的设置点击事件了(该例是为整个item设置点击事件,当然也可以按照此方法为特定控件添加点击处理)
在onCreateViewHolder中为整个item绑定点击事件:
@Override public MyAdapter.ViewHolder onCreateViewHolder (ViewGroup parent , int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout. item_wifiinfo, parent , false) ; v.setOnClickListener( this ); // 创建并放回一个ViewHolder对象 ViewHolder vh = new ViewHolder(v); return vh ; }
注意上面调用接口的onItemClick()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item相关的数据:
@Override public void onBindViewHolder(ViewHolder holder , int position) { holder.view .setTag(position+ "") ; //.... }
4.在外部使用
mAdapter = new MyAdapter(data); mRecyclerView.setAdapter(mAdapter); mAdapter.setOnRecyclerViewItemClickListener (new OnRecyclerViewItemClickListener(){ @Override public void onItemClick(View view , int position){ //...... } });
相关文章推荐
- Android开发学习之路--【前言】
- 【学习C++】1.开始学习C++
- SSL握手
- UESTC P酱的冒险旅途 785 (规律模拟)
- 1026. Table Tennis (30)
- 排序算法稳定性定义及分析
- HDU 5285 wyh2000 and pupil(二分图,染色法)
- Java中方法不可以有默认参数
- BorderLayout控件大小的设置
- HDU 5285 wyh2000 and pupil(二分图,染色法)
- HDU-2473-Junk-Mail Filter-并查集的删除操作
- Android开发之蓝牙开发
- 求较大数的阶乘
- 屏幕截图
- PHP - 直接输出对象的版本问题
- nginx配置
- 利用系统自带的UITabBarController纯代码搭建TabBar
- 百度地图总结第二篇--POI检索功能
- 133. Clone Graph
- java采用MD5加密解密