Android RecyclerView 详解(二) 点击事件绑定、瀑布流和Grid的实现
2016-11-29 14:55
906 查看
Android RecyclerView 详解(二) 点击事件绑定、瀑布流和Grid的实现
先来一张本篇文章的实现效果吧(没有合并行)
有行合并的
一丶点击事件的绑定
我们参考listView的onItemClickListener
(1)返回值为void
(2)有四个参数值
a.adapter的view
b.view被点击的控件
c.position位置
d.数据模型对象(方便得到数据)
(3)创建一个接口
(5)如何得到parent属性
我们需要重写两个方法得到parent
(6)将控件和点击事件进行绑定
a.实现VIew.OnClickListener
这里做一下说明,前两个参数判断你的父布局和你的点击接口是否不为空,那么最后一个判断的是你的删除或者是其他的动画是否在执行,我们需要在动画执行完之后才能实现他的点击事件,否则会出错。
b.控件调用点击方法
(7)在你的需要的地方实现
(8)将实现的接口用adapter传递到MyAdapter中去
至于如何实现条目内的点击直接下载源码就好在下部有链接~
二、设置LayoutManager
1.因为我们需要观察瀑布流布局所以将字段的长度进行更改方便观察
2.为了方便更改我设置了三个按钮进行更改LayoutManager将在这三个按钮的点击事件中对其进行更改,并加上margin方便查看
(1)LinearLayoutManager
如果是所谓的翻转布局如果为true就是翻转布局那么整个RecyclerView将会翻转显示数据。
(2)GridLayoutManager
(3)StaggeredGridLayoutManager(瀑布流布局)
3.那么有时候你想要合并某些行和某些列的话如何操作呢?
这个返回的值就是你将占用多少的行或者列。
源码:源码链接
先来一张本篇文章的实现效果吧(没有合并行)
有行合并的
一丶点击事件的绑定
我们参考listView的onItemClickListener
(1)返回值为void
(2)有四个参数值
a.adapter的view
b.view被点击的控件
c.position位置
d.数据模型对象(方便得到数据)
(3)创建一个接口
public interface onChildListener{ void onChildClick(RecyclerView parent, View view, int position, String data); }(4)写入属性中,并实现他的set方法
private onChildListener onChildListener; public void setOnChildListener(MyAdapter.onChildListener onChildListener) { this.onChildListener = onChildListener; }
(5)如何得到parent属性
我们需要重写两个方法得到parent
/** * 当连接到RecyclerView后,提供数据的时候调用这个方法 * @param recyclerView */ @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); this.recyclerView =recyclerView; } /** * 解绑 * @param recyclerView */ @Override public void onDetachedFromRecyclerView(RecyclerView recyclerView) { super.onDetachedFromRecyclerView(recyclerView); recyclerView = null; }
(6)将控件和点击事件进行绑定
a.实现VIew.OnClickListener
@Override public void onClick(View view) { int position = recyclerView.getChildAdapterPosition(view); if (recyclerView!=null&&listener!=null&&!recyclerView.getItemAnimator().isRunning()) { listener.onChildClick(recyclerView,view,position,list.get(position)); } }
这里做一下说明,前两个参数判断你的父布局和你的点击接口是否不为空,那么最后一个判断的是你的删除或者是其他的动画是否在执行,我们需要在动画执行完之后才能实现他的点击事件,否则会出错。
b.控件调用点击方法
@Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false); view.setOnClickListener(this); return new MyViewHolder(view); }
(7)在你的需要的地方实现
@Override public void onChildClick(RecyclerView parent, View view, int position, String data) { Toast.makeText(this,"点击了第"+position+"个条目",Toast.LENGTH_SHORT).show(); }
(8)将实现的接口用adapter传递到MyAdapter中去
myRecyclerVIew.setAdapter(myAdapter);
至于如何实现条目内的点击直接下载源码就好在下部有链接~
二、设置LayoutManager
1.因为我们需要观察瀑布流布局所以将字段的长度进行更改方便观察
private void initData() { list = new ArrayList<>(); for (int i = 0; i < 100; i++) { if (i%3==0) { list.add(String.format(Locale.CHINA,"第%03d条数据%s",i,"--------------")); }else{ list.add(String.format(Locale.CHINA,"第%03d条数据",i)); } } }
2.为了方便更改我设置了三个按钮进行更改LayoutManager将在这三个按钮的点击事件中对其进行更改,并加上margin方便查看
(1)LinearLayoutManager
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayout.VERTICAL,false); myRecyclerVIew.setLayoutManager(linearLayoutManager);他有三个参数(当前对象,纵向还是横向,是否翻转布局)
如果是所谓的翻转布局如果为true就是翻转布局那么整个RecyclerView将会翻转显示数据。
(2)GridLayoutManager
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false); myRecyclerVIew.setLayoutManager(gridLayoutManager);他有4个参数跟List不同的是他的第二个参数为多少行或者说是多少列。
(3)StaggeredGridLayoutManager(瀑布流布局)
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); myRecyclerVIew.setLayoutManager(staggeredGridLayoutManager);两个参数(多少行或者列,纵向还是横向)
3.那么有时候你想要合并某些行和某些列的话如何操作呢?
//设置跨行或者跨列的数目 gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { if (position==0) { return 3; }else if(position==1){ return 2; } return 1; } });
这个返回的值就是你将占用多少的行或者列。
源码:源码链接
相关文章推荐
- 详解Android中回调机制与RecyclerView的Item点击事件实现
- Android RecyclerView实现RadioButton绑定事件
- Android 高级UI设计笔记20:RecyclerView 的详解之RecyclerView添加Item点击事件
- Android使用RecyclerView实现自定义列表、点击事件以及下拉刷新
- Android中使用RecyclerView和CardView实现瀑布流效果(StaggeredGrid)
- Android RecyclerView的Item点击事件实现整理
- Android RecyclerView详解之实现 ListView GridView瀑布流效果
- Android实现RecyclerView自定义列表、点击事件以及下拉刷新
- Android中RecyclerView的item中控件的点击事件添加删除一行、上移下移一行的代码实现
- Recyclerview实现瀑布流布局及条目的点击事件
- Android中RecyclerView点击,长按事件详解
- (4.1.11.1)Android中使用RecyclerView和CardView实现瀑布流效果(StaggeredGrid)
- Android中RecyclerView的item中控件的点击事件添加删除一行、上移下移一行的代码实现
- [置顶] Android开发之RecyclerView实现点击事件和长按事件
- Android实现RecyclerView自定义列表、点击事件以及下拉刷新
- RecyclerView的Item点击事件,增加删除Item瀑布流动画效果,长按拖动Item,RecyclerView复杂布局、实现新闻频道选择器
- RecyclerView 实现瀑布流及点击事件,含点击回调的接口
- 【Android】RecyclerView的OnItemClickListener点击事件处理
- Android实现图文混排(2) 通过webview实现 并实现点击 图片处理事件
- RecyclerView实现瀑布流效果(图文详解+源码奉送)