recyclaerview的基本操作流程:
Android 默认提供的 RecyclerView 就能支持 线性布局、网格布局、瀑布流布局 三种,而且同时还能够控制横向还是纵向滚动。
而 LayoutManager 只是一个抽象类而已,系统已经为我们提供了三个相关的实现类 LinearLayoutManager(线性布局效果)、GridLayoutManager(网格布局效果)、StaggeredGridLayoutManager(瀑布流布局效果)。
RecyclerView 基础使用关键点同样有两点:
继承重写 RecyclerView.Adapter 和 RecyclerView.ViewHolder
首先我们用recyclerview需要导入一个依赖
compile
'com.android.support:recyclerview-v7:25.3.1'这个依赖版本必须和我们项目的版本一样。
倒好依赖以后我们就可一在想用布局的xml里面直接书写控件就可以了;
recyclerview和listview主要是适配器的编写格式不同
写recyclerview的适配器
/
/recyclerview的适配,注意要指定泛型《泛型里面一般是类名.viewholder继承viewholder(内部实现复用的优化机制)》
在创建的适配器类继承recyclerview特有的adapter但必须定义泛型,泛型的参数是基本生是类名加定义的优化(viewholder)的名;
在自动生成内部优化类、再自动重写三个方法、在定义上下文和数据集合;
重写的三个方法分别作用是:
方法一:
//创建viewholder也就创建出一个item,并把viewholder的item返回出去
@Override
public
ViewHolde onCreateViewHolder(ViewGroup parent,
int
viewType) {
//转换一个view布局对象,决定了item的样子,参数:1:上下文 2:资源文件:3:如果没有就返回空
View itemView = View.
inflate
(
mContext
, R.layout.
recycler_list
,
null
);
//实例化viewholder
ViewHolde viewHolde =
new
ViewHolde(itemView);
//把viewholder传出去
return
viewHolde;
}
方法二:
//当viewholder和数据绑定的时候回调
@Override
public
void
onBindViewHolder(ViewHolde holder,
int
position) {
//从集合里取出item对应的数据
MyBean myBean =
datalist
.get(position);
//给viewholder里的控件对象设置对象
holder.setdata(myBean);
}
方法三:
//得到集合的长度
@Override
public
int
getItemCount() {
//数据不为空
if
(
datalist
!=
null
&&
datalist
.size()>
0
) {
return
datalist
.size();
}
return
0
;
}
下面是优化里面的代码:
public
class
ViewHolde
extends
RecyclerView.ViewHolder {
private
final
ImageView
img
;
private
final
TextView
lv_tv
;
public
ViewHolde(View itemView) {
super
(itemView);
//得到控件的id并提取成员变量
img
= (ImageView) itemView.findViewById(R.id.
lv_img
);
lv_tv
= (TextView) itemView.findViewById(R.id.
lv_tv
);
}
public
void
setdata(MyBean data) {
//给控件赋值
img
.setImageResource(data.
tupian
);
lv_tv
.setText(data.
name
);
}
}
///
然后我们在主activity里面实例化适配器就可以了
实例化之后用recyclerview显示适配器上的内容;区别主要的我们要显示listview可以正向、反向、垂直、和横向(他也有正反两项)
主要还是获取:
//初始化布局管理器,并传入上下文
LinearLayoutManager linearLayoutManager =
new
LinearLayoutManager(
this
);
//通过布局管理器,可以控制条目排序的顺序, true:反向 false 正常(默认)
linearLayoutManager.setReverseLayout(dian);
//设置recyclerview显示的水平还是垂直(LinearLayoutManager.VERTICAL是垂直默认)(定义一个三元运算符来实现)
linearLayoutManager.setOrientation(sp ? LinearLayoutManager.
VERTICAL
:LinearLayoutManager.
HORIZONTAL
);
//给recyclerview添加一个布局管理器
recycler_view
.setLayoutManager(linearLayoutManager);
/
gridview适配器也是大同小异在适配器里改下布局文件这边一样配置
就是获取的布局管理器不一样:
//实例化gridlayout的布局管理器并传入上下文和显示的列数
GridLayoutManager gridLayoutManager =
new
GridLayoutManager(
this
,
3
);
//给他传入一个布尔值来判断他是反向还是正向
gridLayoutManager.setReverseLayout(dian);
//设置他是否是垂直和水平的方向也是通过一个布尔值来实现
gridLayoutManager.setOrientation(sp? gridLayoutManager.
VERTICAL
:gridLayoutManager.
HORIZONTAL
);
//最后把gridviewlayout的容器添加给recyclerview里面便于显示
recycler_view
.setLayoutManager(gridLayoutManager);
///
瀑布流适配器和gridview的适配器一样只是改了一下布局控件的属性
就是获取的布局管理器不一样:
//实例化适配器
Mypubuadapter mypubuadapter =
new
Mypubuadapter(
this
, list);
//给ecyclerview添加数据
recycler_view
.setAdapter(mypubuadapter);
//得到recyclerview瀑布流的布局管理器(里面需要两个参数:参数一是要分为几列:参数二是指定item的排列方向)
StaggeredGridLayoutManager staggeredGridLayoutManager =
new
StaggeredGridLayoutManager(
2
, sp ? StaggeredGridLayoutManager.
VERTICAL
: StaggeredGridLayoutManager.
HORIZONTAL
);
//通过布局管理器可以控制条目排列的顺序 true是反向 false是正常
staggeredGridLayoutManager.setReverseLayout(dian);
//把资源管理器给recyclerview显示
recycler_view
.setLayoutManager(staggeredGridLayoutManager);