RecyclerView基本用法一
程序员文章站
2022-06-14 11:18:07
...
为什么要使用RecyclerView控件替换ListView和GridView呢?整体来看,RecyclerView提供了插拔式的体验,它具有高度的解耦,异常的灵活性和更高的效率,通过设置它不同的ItemAnimator、LayoutManager、ItemDecoration可以实现更丰富多样的效果。但是RecyclerView的使用缺点也是有的,它的分割线需要自己定义,另外他的点击事件也需要自己来实现。
一、配置 build.gradle
dependencies {
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
}
二、使用RecyclerView
RecyclerView rvLayout = findViewById(R.id.rv_layout);
//设置布局管理器
LinearLayoutManager layout = new LinearLayoutManager(this);
layout.setOrientation(layout.VERTICAL);
rvLayout.setLayoutManager(layout);
//设置添加删除item动画
rvLayout.setItemAnimator(new DefaultItemAnimator());
//设置Adapter
RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, data);
rvLayout.setAdapter(adapter);
与ListView不同的是,需要设置布局管理器用于设置条目的排列样式,可以是水平也可以是垂直。
activity_recycler_view布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
Adapter最大的改进就是对ViewHolder的封装,我们只需要定义一个ViewHolder继承RecyclerView.ViewHolder即可。
RecyclerViewAdapter代码
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolder> {
private final Context context;
private final List<String> dataList;
public RecyclerViewAdapter(Context context, List<String> dataList) {
this.dataList = dataList;
this.context = context;
}
@NonNull
@Override
//加载条目布局
public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.item_recycle, parent, false);
return new RecyclerViewHolder(inflate);
}
@Override
//将试图与数据绑定
public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {
holder.tv.setText(dataList.get(position));
}
@Override
public int getItemCount() {
return dataList.size();
}
}
RecyclerViewHolder代码
public class RecyclerViewHolder extends RecyclerView.ViewHolder{
public final TextView tv;
public RecyclerViewHolder(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv);
}
}
item_recycle布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"/>
</FrameLayout>
运行效果如下
下一篇: 详解TCP三次握手/四次挥手