为什么叫做RecyclerView?
- 不关心item是否在正确的位置,如何显示。
- 用类LayoutManager去控制显示的风格,不同实例不同风格。listview,gridview - 不关心item之间如何分割。
- 控制类之间分割的效果,类ItemDecoration。
- 不关注item增加和删除的动画效果
- 引入ItemAnimator.
- 仅仅关注如何回收和复用view
(recyclerview有插件样的架构)
RecyclerView相关的重要类
- Adapter
- ViewHolder ?
- LayoutManager
- ItemDecoration
- ItemAnimator
以下是学长对4个方法的讲解:
1.构造方法:
public SimpleAdapter(Context context, List<String> datas) {
this.mContext = context;
this.mDatas = datas;
mInflater = LayoutInflater.from(context);
}
- 加载一个布局 关于layoutinflater
加载一个布局的意思就像是将一个XML布局文件“加载”到手机屏幕上作为一个View。View就算是手机上每一个控件的基本单位,任何一个看得见的东西都是一个View(当然有可能几个东西合起来才是一个view),例如 你手机QQ里面要出现一条消息( 其实就是一个蓝色框白色字体的view),就得告诉手机这个view是在哪一个Context加载的,这个页面加载的view 就得传入这个页面的context,所以构造方法里面inflate要from(Context),layoutinflater是布局加载器,用来加载一个布局,然后,要让它inflate的话,得调用它得方法,所以就要得到它的实例嘛。就相当于new layoutinflater(context).
- onCreateView
@Override
//创建ViewHolder
public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
View view =mInflater.inflate(R.layout.item_single_textview,arg0,false);
MyViewHolder viewHolder=new MyViewHolder(view);
return viewHolder;
}
这里oncreatview方法返回一个viewHolder(它是MyViewHolder类的嘛)这里传入了一个view,这里的view就是那个item,就是前面在布局里要加载的那个item。之所以要传item进去,就不得不说viewholder。举个例子,每一条消息的框 或者联系人列表 每一单项都是一个view 每一个view都用一个view holder存起来。所以你要新建一个viewholder,肯定得传它存的view。显示了几个view,就要从相应的几个viewholder view里取出几个view。
- 最后是
View view =mInflater.inflate(R.layout.item_single_textview,arg0,false);
未完待续...
网友评论