recyclerview的基本流程

来源:互联网 发布:广东韶关网络问政平台 编辑:程序博客网 时间:2024/06/08 10:06
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
publicViewHolde onCreateViewHolder(ViewGroup parent,intviewType) {
//转换一个view布局对象,决定了item的样子,参数:1:上下文 2:资源文件:3:如果没有就返回空
View itemView = View.inflate(mContext, R.layout.recycler_list,null);
//实例化viewholder
ViewHolde viewHolde = newViewHolde(itemView);
//把viewholder传出去
returnviewHolde;
}
方法二:
//当viewholder和数据绑定的时候回调
@Override
publicvoidonBindViewHolder(ViewHolde holder,intposition) {
//从集合里取出item对应的数据
MyBean myBean = datalist.get(position);
//给viewholder里的控件对象设置对象
holder.setdata(myBean);
}
方法三:
//得到集合的长度
@Override
publicintgetItemCount() {
//数据不为空
if(datalist!=null&&datalist.size()>0) {
returndatalist.size();
}
return0;
}
下面是优化里面的代码:
publicclassViewHoldeextendsRecyclerView.ViewHolder {

privatefinalImageViewimg;
privatefinalTextViewlv_tv;

publicViewHolde(View itemView) {
super(itemView);
//得到控件的id并提取成员变量
img= (ImageView) itemView.findViewById(R.id.lv_img);
lv_tv= (TextView) itemView.findViewById(R.id.lv_tv);
}

publicvoidsetdata(MyBean data) {
//给控件赋值
img.setImageResource(data.tupian);
lv_tv.setText(data.name);

}
}
///////////////////////////////////////
然后我们在主activity里面实例化适配器就可以了
实例化之后用recyclerview显示适配器上的内容;区别主要的我们要显示listview可以正向、反向、垂直、和横向(他也有正反两项)
主要还是获取://初始化布局管理器,并传入上下文
LinearLayoutManager linearLayoutManager = newLinearLayoutManager(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 = newGridLayoutManager(this,3);
//给他传入一个布尔值来判断他是反向还是正向
gridLayoutManager.setReverseLayout(dian);
//设置他是否是垂直和水平的方向也是通过一个布尔值来实现
gridLayoutManager.setOrientation(sp? gridLayoutManager.VERTICAL:gridLayoutManager.HORIZONTAL);
//最后把gridviewlayout的容器添加给recyclerview里面便于显示
recycler_view.setLayoutManager(gridLayoutManager);


///////////////////////////////////////////////////
瀑布流适配器和gridview的适配器一样只是改了一下布局控件的属性
就是获取的布局管理器不一样:
//实例化适配器
Mypubuadapter mypubuadapter =newMypubuadapter(this, list);
//给ecyclerview添加数据
recycler_view.setAdapter(mypubuadapter);
//得到recyclerview瀑布流的布局管理器(里面需要两个参数:参数一是要分为几列:参数二是指定item的排列方向)
StaggeredGridLayoutManager staggeredGridLayoutManager =newStaggeredGridLayoutManager(2, sp ? StaggeredGridLayoutManager.VERTICAL: StaggeredGridLayoutManager.HORIZONTAL);
//通过布局管理器可以控制条目排列的顺序 true是反向 false是正常
staggeredGridLayoutManager.setReverseLayout(dian);
//把资源管理器给recyclerview显示
recycler_view.setLayoutManager(staggeredGridLayoutManager);
0 0
原创粉丝点击