目录
3.但RecyclerView不会替代ListView,因为使用场景不同;但是会替代很多开元框架:横向ListView、瀑布流等
2.创建RecycleViewAdapter extends RecyclerView.Adapter
优缺点:
优点:它本身它是不关心视图相关的问题的,只负责回收和重用的工作,所有关于布局、绘制和数据展示相关的所有问题,都被委派给了一些”插件化”的类来处理。例如布局,接入LayoutManager,动画则接入ItemAnimator, 这使得RecyclerView的API变得非常灵活。
缺点:item的点击、长按事件需要自己写
与ListVIew比较:
1.ListView相比RecycleView的优点:
a.ListView实现添加HeaderView和FooderView有直接的方法
b.分割线可以直接设置
c.ListView实现onItemClickListence和onItemLongClickListence有直接的方法
2.RecyclerView相比ListView的优点
a.封装了ViewHodler,效率更高
b.可以添加增删Item动画、侧滑功能等
c.支持局部更新,可见才更新,不可见不更新
d.插件式实现,各个功能模块化,解耦性强,使用起来更方便
3.但RecyclerView不会替代ListView,因为使用场景不同;但是会替代很多开元框架:横向ListView、瀑布流等
使用:
1.引用依赖包
implementation 'com.android.support:recyclerview-v7:27.1.1'
2.创建RecycleViewAdapter extends RecyclerView.Adapter
如上界面如何实现多布局??
1.创建几个flag
public static final int banner = 0;//广告
public static final int chanel= 1;//频道
public static final int act=2;//活动
public static final int seckill=3;//秒杀
public static final int recommend=4;//推荐
public static final int hot=5;//热卖
2.创建几个ViewHolder
3.实现RecyclerView.Adapter的几个方法
/**
* item的总个数:
* @return
*/
@Override
public int getItemCount() {
return 6;
}
/**
* item类型:
* @param position
* @return
*/
@Override
public int getItemViewType(int position) {
switch (position) {
case banner:
currenType = banner;
break;
case chanel:
currenType = chanel;
break;
case act:
currenType = act;
break;
case seckill:
currenType = seckill;
break;
case recommend:
currenType = recommend;
break;
case hot:
currenType = hot;
break;
}
return currenType;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType==banner){
return new bannerHolder(context,layoutInflater.inflate(R.layout.banner_item,null));
}else if (viewType==chanel){
return new MyViewHolder(context,layoutInflater.inflate(R.layout.channel_item,null));
}else if (viewType==act){
return new ActHolder(context,layoutInflater.inflate(R.layout.act_item,null));
}else if (viewType==seckill){
return new SeckillHolder(context,layoutInflater.inflate(R.layout.seckill_item,null));
}else if (viewType==recommend){
return new RecommendHolder(context,layoutInflater.inflate(R.layout.recommend_item,null));
}else if (viewType==hot){
return new HotHolder(context,layoutInflater.inflate(R.layout.hot_item,null));
}
return null;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (getItemViewType(position)==banner){
bannerHolder bannerHolders= (bannerHolder) holder;
List<HomeBean.ResultBean.BannerInfoBean> banner_info = result.getBanner_info();
bannerHolders.setData(banner_info);
}else if (getItemViewType(position)==chanel){
MyViewHolder myViewHolder= (MyViewHolder) holder;
List<HomeBean.ResultBean.ChannelInfoBean> channel_info= result.getChannel_info();
myViewHolder.setData(channel_info);
}else if (getItemViewType(position)==act){
ActHolder actHolder= (ActHolder) holder;
List<HomeBean.ResultBean.ActInfoBean> act_info = result.getAct_info();
actHolder.setData(act_info);
}else if (getItemViewType(position)==seckill){
SeckillHolder seckillHolder= (SeckillHolder) holder;
HomeBean.ResultBean.SeckillInfoBean seckill_info = result.getSeckill_info();
seckillHolder.setData(seckill_info);
}else if (getItemViewType(position)==recommend){
RecommendHolder recommendHolder= (RecommendHolder) holder;
List<HomeBean.ResultBean.RecommendInfoBean> recommend_info = result.getRecommend_info();
recommendHolder.setData(recommend_info);
}else if (getItemViewType(position)==hot){
HotHolder hotHolder= (HotHolder) holder;
List<HomeBean.ResultBean.HotInfoBean> hot_info = result.getHot_info();
hotHolder.setData(hot_info);
}
}
4.初始化RecycleView并设置布局管理器
// 定义一个线性布局管理器
LinearLayoutManager manager = new LinearLayoutManager(this);
// 设置布局管理器
mRecyclerView.setLayoutManager(manager);
// 设置adapter
DemoAdapter adapter = new DemoAdapter(DemoActivity.this, mEntityList);
mRecyclerView.setAdapter(adapter);