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):局部刷新指定数据项
特别声明:内容总结来源多方面材料,仅记录学习,如有侵权或不对之处,还请告知,定当删除或改正