RecyclerView的使用

目录

优缺点:

与ListVIew比较:

1.ListView相比RecycleView的优点:

2.RecyclerView相比ListView的优点

3.但RecyclerView不会替代ListView,因为使用场景不同;但是会替代很多开元框架:横向ListView、瀑布流等

使用:

 1.引用依赖包

2.创建RecycleViewAdapter extends RecyclerView.Adapter

1.创建几个flag

2.创建几个ViewHolder

3.实现RecyclerView.Adapter的几个方法

4.初始化RecycleView并设置布局管理器

优缺点:

优点:它本身它是不关心视图相关的问题的,只负责回收和重用的工作,所有关于布局、绘制和数据展示相关的所有问题,都被委派给了一些”插件化”的类来处理。例如布局,接入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);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值