「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」
一、 简介
前段时间用到了RecyclerView,发现自己对它了解的只是皮毛,所以趁这次机会,对RecyclerView做一个深入总结。
RecyclerView是Google从Android 5.0推出的替代ListView的一个控件,官网上给出的解释是这样的:
A flexible view for providing a limited window into a large data set.
RecyclerView出现,代替了很多控件库,它可以实现纵向/横向ListView,GridView, 瀑布流控件等等,而且实现起来非常简单,只需要更改LayoutManager(纵向/横向ListView通过LinearLayoutManager实现,GridView是GridLayoutManager,瀑布流对应StaggeredGridLayoutManager)。
二、优点
(1) 支持各种列表显示,实现起来非常简单 (2) 实现View的复用和回收,规范了viewholder的使用 (3) 可以局部刷新 (4) 能够实现item的拖拽和侧滑
三、使用
这一篇主要是RecyclerView简单使用
1. 导入RecyclerView包
implementation "androidx.recyclerview:recyclerview:1.2.1"
// For control over item selection of both touch and mouse driven selection
implementation "androidx.recyclerview:recyclerview-selection:1.1.0"
2. 在布局中引入RecyclerView类
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/id_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
3. Activity初始化
在Activity中初始化RecyclerView,设置LayoutManager和Adapter
recyclerView=findViewById(R.id.id_recyclerview);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
adapter=new RecyclerViewAdapter(this,listBean);
recyclerView.setAdapter(adapter);
adapter.setOnRecyclerViewListener(new RecyclerViewAdapter.onRecyclerViewListener() {
@Override
public void onClick(int position) {
Snackbar.make(recyclerView,"点击了"+listBean.get(position),Snackbar.LENGTH_SHORT).show();;
}
});
4. Adapter
这一步是比较重要的,自定义一个Adapter,用来展示数据,具体方法的作用:
-
onCreateViewHolder:创建一个ViewHolder
-
onBindViewHolder:绑定ViewHolder
-
getItemCount():获取item的数量
-
getItemViewType():可以实现定义多个不同类型的布局
具体的实现方法:
(1) 重写getItemViewType()方法,根据需求规则给出不同的type值。
(2) 在onBindViewHolder()里面根据不同holder的类型来赋予相对于的数据
5. Item的点击实现
我们实现一个列表,不仅仅要展示内容,还需要点击跳转,但是在RecyclerView中,没有像ListView.setOnItemClickListener()这样的的监听接口。那怎么实现点击事件呢?我们可以在Adapter中添加监听事件的接口
6. 简单的Adapter实现
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> implements View.OnClickListener {
private Context mContext;
private List<Bean> mLists;
private onRecyclerViewListener mOnRecyclerViewListener;
public RecyclerViewAdapter(Context context, List<Bean> list) {
mContext=context;
mLists = list;
}
@NonNull
@NotNull
@Override
public ViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item,parent,false);
ViewHolder viewHolder=new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull @NotNull ViewHolder holder, int position) {
Bean bean=mLists.get(position);
holder.textView.setText(bean.getName());
holder.textView.setOnClickListener(this);
}
@Override
public int getItemCount() {
return mLists==null?0:mLists.size();
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.id_text:
int position = (int) view.getTag();
mOnRecyclerViewListener.onClick(position);
break;
default:
break;
}
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ViewHolder(@NonNull @NotNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.id_text);
}
}
public void setOnRecyclerViewListener(onRecyclerViewListener onRecyclerViewListener){
this.mOnRecyclerViewListener=onRecyclerViewListener;
}
interface onRecyclerViewListener{
void onClick(int position);
}
}
这篇主要是初识RecyclerView,简介介绍一下Recycler的优缺点以及使用,下一篇介绍分割线和动画