1、目标任务:
学习Android——RecyclerView基本知识
2、预计时间:
1天
3、完成情况:
-
引入RecyclerView
- 在build.gradle文件中引入该类:
compile 'com.android.support:recyclerview-v7:23.4.0'
- 在build.gradle文件中引入该类:
-
创建适配器
- 创建Adapter:创建一个继承
RecyclerView.Adapter<VH>
的Adapter类(VH是ViewHolder的类名) - 创建ViewHolder:在Adapter中创建一个继承
RecyclerView.ViewHolder
的静态内部类,记为VH - 在Adapter中实现3个方法:
- 创建Adapter:创建一个继承
- onCreateViewHolder()
这个方法主要生成为每个Item inflater出一个View,但是该方法返回的是一个ViewHolder。该方法把View直接封装在ViewHolder中,在onCreateViewHolder()
中,映射Layout必须为:View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_1, parent, false);
- onBindViewHolder():用于适配渲染数据到View中
- getItemCount():总共有多少个条目
-
// ① 创建Adapter public class NormalAdapter extends RecyclerView.Adapter<NormalAdapter.VH>{ //② 创建ViewHolder public static class VH extends RecyclerView.ViewHolder{ public final TextView title; public VH(View v) { super(v); title = (TextView) v.findViewById(R.id.title); } } private List<String> mDatas; public NormalAdapter(List<String> data) { this.mDatas = data; } //③ 在Adapter中实现3个方法 @Override public void onBindViewHolder(VH holder, int position) { holder.title.setText(mDatas.get(position)); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //item 点击事件 } }); } @Override public int getItemCount() { return mDatas.size(); } @Override public VH onCreateViewHolder(ViewGroup parent, int viewType) { //LayoutInflater.from指定写法 View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_1, parent, false); return new VH(v); } }
-
设置RecyclerView
- Layout Manager(必选)
- Adapter(必选)
- Item Decoration(可选,默认为空)
- Item Animator(可选,默认为DefaultItemAnimator)
-
List<String> data = initData(); RecyclerView rv = (RecyclerView) findViewById(R.id.rv); rv.setLayoutManager(new LinearLayoutManager(this)); rv.setAdapter(new NormalAdapter(data));
-
Adapter适配器
- 为RecyclerView提供数据
-
Item Decoration间隔样式
- RecyclerView通过
addItemDecoration()
方法添加item之间的分割线
自定义间隔样式需要继承
RecyclerView.ItemDecoration
类,该类是个抽象类,官方目前并没有提供默认的实现类,主要有三个方法。- onDraw(Canvas c, RecyclerView parent, State state),在Item绘制之前被调用,该方法主要用于绘制间隔样式。
- onDrawOver(Canvas c, RecyclerView parent, State state),在Item绘制之前被调用,该方法主要用于绘制间隔样式。
- getItemOffsets(Rect outRect, View view, RecyclerView parent, State state),设置item的偏移量,偏移的部分用于填充间隔样式,即设置分割线的宽、高;在RecyclerView的
onMesure()
中会调用该方法。
onDraw()
和onDrawOver()
这两个方法都是用于绘制间隔样式,我们只需要复写其中一个方法即可。 - RecyclerView通过
4、遇到问题:
对于适配器Adapter不是很熟悉