android新技术之RecyclerView使用

概述

它是在android5.0之后推出的一个更强大,更灵活的控件,配合着CardView,可以实现比较美观的展示,可以说它是ListView的升级版,ListVie中我们需要自己写ViewHolder,当然你也可以不写,而在RecylerView中,是必须要写的。它同listView一样,当用户滑动使当前一个可视的Item滑出屏幕,这个Item的视图将会被回收并在一个新Item进入可视范围后重新被使用,可回收利用View是个很实用的功能,它不仅可以减少CPU不断inflate View的开销,而且可以节省缓存View的内存开销。

RecylerView的相关类

和ListView不一样的是,RecyclerView不再负责Item的摆放等显示方面的功能,而是通过功能类来实现与LIstView类似的效果,相对于LIstView,开发者可以自定义各种各样满足定制需求的的功能类,下面就是常见的公共类:

  1. RecyclerView.Adapter : 托管数据集合,为每个Item创建视图;
  2. RecyclerView.ViewHolder:承载Item视图的子视图;
  3. RecyclerView.LayoutManager:负责Item视图的布局;
  4. RecyclerView.ItemDecoration:为每个Item视图添加子视图,类似与LIstVIew的Divider(分割线);
  5. RecyclerView.ItemAnimator:负责添加、删除数据时的动画效果。

下面分别来看看各个功能类的实现效果:

RecyclerView.Adapter与RecyclerView.ViewHolder

Adapter负责扮演两个角色:不仅为底部数据提供支持而且还负责为数据创建合适的视图。

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainAdapterHolder> {
   
    private List<ItemBean> mDataList;
    public MainAdapter(List<ItemBean> dataList) {
        this.mDataList = dataList;
    }
    @Override
    public MainAdapterHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, null, false);
        return new MainAdapterHolder(view);
    }

    @Override
    public void onBindViewHolder(MainAdapterHolder mainAdapterHolder, int i) {
        mainAdapterHolder.setDatas(mDataList.get(i));
    }

    @Override
    public int getItemCount() {
        return mDataList.size();
    }
    //Holder ,必须继承RecyclerView.ViewHolder
    public class MainAdapterHolder extends RecyclerView.ViewHolder {
   

        public MainAdapterHolder(View itemView) {
            super(itemView);
            tv = (TextView) itemView.findViewById(R.id.tv);
            iv = (ImageView) itemView.findViewById(R.id.iv);
        }

        private TextView tv;
        private ImageView iv;

        public void setDatas(ItemBean bean) {
            tv.setText(bean.desc);
            iv.setImageResource(bean.id);
        }
    }
}

上面就是一个简单的adapter,注意谷歌要求必须要有holder,且要继承RecyclerView.ViewHolder类,进行视图的缓存。
onCreateViewHolder中负责为Item创建视图,onBindViewHolder负责将数据绑定到Item的视图上。

RecyclerView.LayoutManager

该类负责将每个Item

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值