1,概述
网上已经有很多这方面教程,我只简单记录几点;
1,RecyclerView的性能优于ListView,因此后者已被弃用;
2,RecyclerView实现采用了适配者模式,即抽象类RecyclerView.ViewHolder,因此业务类需要继承该类,在infalte时拿到我们item布局元素;
3,RecyclerView提供多种布局管理(LayoutManager),已知的实现如下,可自定义特殊布局;
2,基本使用
1,需在findViewById拿到RecyclerView;
2,设置LayoutManager,这里直接使用linearLayoutManager
3,创建适配类RecyclerView.Adapter<T extend RecyclerView.ViewHolder>,重写三个关键方法
onCreateViewHolder,在此inflate咱们item布局,传到ViewHolder业务子类;
onBindViewHolder,在绑定ViewHolder时调用,设置业务UI;
getItemCount,返回list.size();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
mRecycleView = (RecyclerView) findViewById(R.id.recycle_view_demo);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
mRecycleView.setLayoutManager(linearLayoutManager);
// 为了方便写成匿名类,不可模仿哦
List<DemoSomething> list = new ArrayList<>();
RecyclerView.Adapter<RecyclerView.ViewHolder> adapter = new RecyclerView.Adapter<RecyclerView.ViewHolder>() {
@NonNull
@NotNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
//创建item,
View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
DemoViewHolder demoViewHolder = new DemoViewHolder(inflate);
return demoViewHolder;
}
@Override
public void onBindViewHolder(@NonNull @NotNull RecyclerView.ViewHolder holder, int position) {
//绑定位置时,赋值item
((DemoViewHolder) holder).itemName.setText(list.get(position).name);
((DemoViewHolder) holder).itemView.setImageBitmap(list.get(position).image);
((DemoViewHolder) holder).itemView.setOnClickListener(v -> {
//do something
});
}
@Override
public int getItemCount() {
return list.size();
}
};
mRecycleView.setAdapter(adapter);
}
public static class DemoViewHolder extends RecyclerView.ViewHolder {
private ImageView itemView;
private TextView itemName;
public DemoViewHolder(@NonNull @NotNull View view) {
super(view);
itemView = view.findViewById(R.id.item_image);
itemName = view.findViewById(R.id.item_name);
}
}
public static class DemoSomething {
String name;
Bitmap image;
}
3,进阶使用
这里直接贴出另一位博主的博客:
Android开发知识(十六):Android强大的控件-RecycleView使用篇_lc_miao的专栏-CSDN博客_recycle view