学习以WWWH的方式去学:
一、什么是RecyclerView?
官方说明:
RecyclerView is a more advanced and flexible version of ListView. This
widget is a container for large sets of views that can be recycled and
scrolled very efficiently. Use the RecyclerView widget when you have
lists with elements that change dynamically.(recyclerview是更先进和灵活的版本的列表视图。这个小工具是一大套,可以回收和滚动视图的容器非常有效。当你使用recyclerview widget元素动态变化表。)
二、我们为什么要使用RecyclerView?
那么有了ListView、GridView为什么还需要RecyclerView这样的控件呢?整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。
三、RecyclerVIew优,缺点?
RecyclerVIew优点:
RecyclerView本身它是不关心视图相关的问题的,由于ListView的紧耦合的问题,google的改进就是RecyclerView本身不参与任何视图相关的问题。它不关心如何将子View放在合适的位置,也不关心如何分割这些子View,更不关心每个子View各自的外观。更进一步来说就是RecyclerView它只负责回收和重用的工作,这也是它名字的由来。所有关于布局、绘制和其他相关的问题,也就是跟数据展示相关的所有问题,都被委派给了一些”插件化”的类来处理。这使得RecyclerView的API变得非常灵活。你需要一个新的布局么?接入另一个LayoutManager就可以了!你想要不同的动画么?接入一个新的ItemAnimator就可以了,诸如此类等等。
RecyclerView缺点:
在RecyclerView中,没有一个onItemClickListener方法。所以目前在适配器中处理这样的事件比较好。如果想要从适配器上添加或移除条目,需要明确通知适配器。这与先前的notifyDataSetChanged()方法稍微有些不同。
四、RecyclerView的简单使用?
1.你想要控制其显示的方式,请通过布局管理器LayoutManager
2.Adapter:继承自RecyclerView.Adapetr类,
3.ViewHolder:继承自RecyclerView.ViewHolder类
4.拓展ItemAnimator ItemDecoration
五、布局管理器
1)LayoutManager(LinearLayoutManager)
这里给出经常使用的已经实现好了的LayoutManager类,LinearLayoutManager、(线性布局管理器)
支持横向,纵向。
mRcView = (RecyclerView) findViewById(R.id.id_recyclerview);
mRcView.setLayoutManager(new LinearLayoutManager(this));
2)布局管理器LayoutManager(GridLayoutManager )
这里给出经常使用的已经实现好了的 LayoutManager类,GridLayoutManager 、(网格布局管理器)
mRcView = (RecyclerView) findViewById( R.id.id_recyclerview);
mRcView.setLayoutManager(new GridLayoutManager(this,4));
3)布局管理器LayoutManager(StaggeredGridLayoutManager)
纵向的
mRcView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL));
横向的
mRclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.HORIZONTAL));
六、Adapter类的定义:
自定义一个HomeAdapter类,这里面需要注意:
重写两个重要的方法:
onBindViewHodler(ViewGroup parent, int viewType);
onCreateViewHolder(ViewHolder holder, int position);
getItemCount()
同时这边我们还需要创建一个ViewHolder类。
class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>
{
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
HomeActivity.this).inflate(R.layout.item_home, parent,
false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position)
{
holder.tv.setText(mDatas.get(position));
}
@Override
public int getItemCount()
{
return mDatas.size();
}
class MyViewHolder extends ViewHolder
{
TextView tv;
public MyViewHolder(View view)
{
super(view);
tv = (TextView) view.findViewById(R.id.id_num);
}
}
}
}
RecyclerView总结
Adapter:包装数据集合并且为每个条目创建视图。
ViewHolder:保存用于显示每个数据条目的子View。
LayoutManager:将每个条目的视图放置于适当的位置。
ItemDecoration:在每个条目的视图的周围或上面绘制一些装饰视图。
ItemAnimator:在条目被添加、移除或者重排序时添加动画效果。