RecyclerView的使用和源码理解(一)

RecyclerView的基本使用

1、recyclerView介绍

官方介绍:A flexible view for providing a limited window into a large data set.
recyclerView是Android 5.0版本,基于support-v7出现的组件,也被引入到androidx。recyclerView在使用上也更加灵活,数据复用,也是一个核心功能。从官方介绍可知:“一个灵活的视图,用于提供进入大型数据集的有限窗口”。

2、基本使用

2.1、引入依赖:在gradle中引入,这里引入的是recyclerview-v7:28.0.0’

implementation 'com.android.support:recyclerview-v7:28.0.0'

2.2、常用方法

必须设置
1.RecyclerView.setLayoutManager();
设置布局管理器,设置显示样式,常用布局:线性布局(LinearLayoutManager)、网格布局(GridLayoutManager)、瀑布布局(StaggeredGridLayoutManager)。
2.RecyclerView.setAdapter();
设置适配器,当设置数据,数据发生变化时,用来刷新列表数据
非必须
3.RecyclerView.setItemAnimator();
设置动画
4.RecyclerView.addItemDecoration()
为显示项设置分割线

2.3、创建适配器

先看适配器结构:

public class BlowPlanAdapter extends RecyclerView.Adapter<BlowPlanAdapter.InnerHolder> {
    private Context mContext;
    private List<DeStatisticsInfo> deStatisticsInfoList;
    private blowItemClickListener listener;

    public BlowPlanAdapter(Context context) {
        this.mContext = context;
    }

    @NonNull
    @Override
    public InnerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.item_blowplan,parent,false);
        InnerHolder holder = new InnerHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull InnerHolder holder, int position) {
    。。。
        holder. mLocationTv.setText(dataList.get(position));
        holder. mLocationTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null) {
                    listener.onBlowItemClickListener(dataList.get(position),position+1);
                }
            }
        });
    }

    @Override
    public int getItemCount() {
         if (dataList != null) {
            return dataList.size();
        }else{
            return 0;
        }
    }

  public static class InnerHolder extends RecyclerView.ViewHolder {
        private View llCont;
        private final TextView mLocationTv;
        private final TextView mDeNumberTv;
        private final TextView mDeTimeTv;
        private final TextView mDeStatusTv;
        private Button btTry,btDischarge;

        public InnerHolder(@NonNull View itemView) {
            super(itemView);
            llCont = itemView.findViewById(R.id.ll_cont);
            mLocationTv = itemView.findViewById(R.id.text_location);
            mDeNumberTv = itemView.findViewById(R.id.text_deNumber);
            mDeTimeTv = itemView.findViewById(R.id.text_delayTime);
            mDeStatusTv = itemView.findViewById(R.id.text_deStatus);
            btTry = itemView.findViewById(R.id.bt_try);
            btDischarge = itemView.findViewById(R.id.bt_discharge);
        }
    }
  }
2.3.1、创建一个类继承自RecyclerView.Adapter并创建内部类,继承自RecyclerView.ViewHolder,并实现三个方法
   1.onCreateViewHolder():创建ViewHolder对象
   2.onBindViewHolder():用于绑定试图和显示数据的关系,也可以对相应控件,添加监听,至于数据的返回,可以考虑回调,或者其它自己习惯的方式
   3.getItemCount():返回显示数据的大小,也就是显示条目
2.3.2、既然是显示复杂的内容,那显示内容的控件就可以再holder中声明,如上代码InnerHolder中,上述代码中只有一个TextView,实际开发中,可自己设置需要的控件和布局在上述代码R.layout.item_blowplan,parent文件中。例如这样:

在这里插入图片描述

2.3.3、数据源的传入

1.可以在构造方法BlowPlanAdapter(Context context)中实例化时传入,也可以单独写个方法,将数据直接赋值给数据源。个人习惯单独写一个。
2.展示数据,根据自己的需求,可以是简单数据列表,也可以是实体类列表。

2.3.4、列表的刷新

1.notifyDataSetChanged():所有列表刷新,也就是列表中,所有数据刷新
2.notifyItemChanged(int):刷新指定的数据项,需传入刷新的position
3.notifyItemRangeChanged(int,int):从指定的位置,刷新到指定数目。
4.notifyItemInserted(int):指定数据插入的位置。
5.notifyItemMoved(int,int):从一个位置移动到另一个位置
6.notifyItemRemoved(int):删除指定位置的数据
7.notifyItemChanged(int, Object):局部刷新指定数据项

特别声明:内容总结来源多方面材料,仅记录学习,如有侵权或不对之处,还请告知,定当删除或改正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个Bug有点难搞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值