移动应用团队代码走查(20170217)
1 摘要
走查主题:Android RecyclerView 使用解析
主讲人员:肖健
参加人员:杨龙、万峥嵘、汪洋。
走查时间:2017年2月17日星期五下午16:00到17:30
走查地点:公司负一楼
2 走查内容
2.1 RecyclerView简介
在android L的预览版中,最新的v7支持包新添加了两个控件:RecyclerView和CardView。今天讲解的RecyclerView是经典的ListView的进化与升 华,与ListView比起来具有高度的解耦、更加灵活的特性,但也因此引入了一定的复杂性。
2.2 RecyclerView的使用方式
我们可以通过导入Support-v7包进行使用:
Recyclerview 有充分的定制自由,它可实现以下多种效果:
1.listview横向、纵向数据展示。
2.gridview网格布局数据展示。
3.StaggeredGrid瀑布流式布局数据展示。
想要实现效果,只需要为Recyclerview设置布局管理器及关联adapter就可以显示数据展示效果,其使用代码:
//找到Recyclerview控件 mRecyclerView = findView(R.id.id_recyclerview);
①.listview代码设置:
//设置布局管理器 mRecyclerView.setLayoutManager(new LinearLayoutManager(dataActivity));
//设置adapter mRecyclerView.setAdapter(adapter)。
一般情况下如果不设置滑动方向,默认是纵向滑动,想要实现横向滑动,只需要在设置布局管理器的地方做更改就可以:
//设置布局管理器
// mRecyclerView.setLayoutManager(new LinearLayoutManager(dataActivity));
替换成以下布局就好: mRecyclerViewsetLayoutManager(new LinearLayoutManager(activity,LinearLayoutManager.HORIZONTAL,false));
②.girdview代码设置:
//设置布局管理器 mRecyclerView.setLayoutManager(new GridLayoutManager(this,4));
//只需要更改布局管理器就可实现效果。
//设置adapter mRecyclerView.setAdapter(adapter)。
③.瀑布流式代码设置:
此效果与gridview效果一致,如果需要实现瀑布流式效果,只需要在adapter的onBindViewHolder方法中为我们的item设置个随机的高度就可以,当然也支持横向和纵向数据展示:
//设置布局管理器
mRecyclerView.setLayoutManager(newStaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));//纵向
//mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.HORIZONTAL));//横向
//设置adapter
mRecyclerView.setAdapter(adapter)。
下面是在adapter中引入item xml文件的设置方法代码:
@Override
public AttachmentMaterHolderonCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(context).inflate(R.layout.material_list_item,null);
//此处为引入item的xml文件比较简单就不贴出来了。
AttachmentMaterHolder holder=new AttachmentMaterHolder(view);
return holder;
}
Activity的布局文件
< RelativeLayout
xmlns:Android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
< android.support.v7.widget.RecyclerView
android:id="@+id/id_recyclerview"
android:divider="#ffff0000"
android:dividerHeight="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</ RelativeLayout >
在Acitvity中的onCreate中引用代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mRecyclerView = findView(R.id.id_recyclerview);
//设置布局管理器
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//设置adapter
mRecyclerView.setAdapter(new AttachmentMaterAdapter(this,“数据集”));
}
以上代码是实现初步的简单效果大致为:
listview、gridview、瀑布流式效果:
为了实现更炫酷的效果,我们可加入可选操作:
//设置Item增加、移除动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
这是系统为我们提供的一个默认的实现类,值得注意,这里更新数据集需要用 notifyItemInserted(position)与notifyItemRemoved(position) ,而不是notifyDataSetChanged()否则没有动画效果。
其中分割线的添加需要在代码中设置:
//添加分割线
mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.HORIZONTAL_LIST));
其中ItemDecoration需要我们自己去实现,重写该方法计算分割线。
在Recyclerview中如果我们需要添加点击事件或者长按事件需要我们自己在adapter中去添加代码实现adapter的点击事件,值得注意的地方是它的插入和删除数据的时候刷新是先调用notifyItemChanged(position);
再调用:notifyItemRangeChanged(position, itemCount);