RecyclerView的使用笔记
1、导入资源
在 build.gradle 文件下添加,记得点击 sync new
implementation 'com.android.support:recyclerview-v7:29.0.0'
2、准备容器和样式文件
容器 edit.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:id="@+id/recycle_view"/>
</RelativeLayout>
my_item_view (自定义样式文件)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/text"
android:textSize="28sp"
android:background="#FFBB86FC"/>
</LinearLayout>
注意:在准备样式文件的时候,注意 LinearLayout 的 layout_height=“wrap_content”
3、准备adapter
1)recyclerView 的 adapter 在写的时候和 BaseAdapter 很像,都需要一个 ViewHolder 类为样式文件适配各种数据。
2)recycleview 的 adapter 相比于 baseAdapter 只需要重写3个方法,分别是:
onCreateViewHolder(@NonNull ViewGroup parent, int viewType);
当自定义 adapter 在继承时使用 定义的 ViewHolder 作为数据类型,则在此方法返回的也是 ViewHolder类型。
onBindViewHolder(@NonNull MyViewHolder holder, int position);
为 ViewHolder 类绑定数据。
getItemCount();返回数据条数。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
//接收数据
private String datas[];
public MyAdapter(String[] data){
this.datas = data;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_item_view,parent,false);
MyViewHolder vm = new MyViewHolder(view);
return vm;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.textView.setText(datas[position]);
}
@Override
public int getItemCount() {
return datas.length;
}
//自定义类,用于自定义样式适配数据
public static class MyViewHolder extends RecyclerView.ViewHolder{
public TextView textView;
public MyViewHolder(View view){
super(view);
textView = view.findViewById(R.id.text);
}
}
}
4、在 java 文件中使用
private RecyclerView recyclerView;
private String[] mDataSet;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit);
//lambda();
//准备要插入的数据
initDate();
recyclerView = findViewById(R.id.recycle_view);
//设置对齐方式
recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
//必须设置布局管理器
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//准备适配器
MyAdapter adapter = new MyAdapter(mDataSet);
recyclerView.setAdapter(adapter);
}
private void initDate(){
mDataSet = new String[20];
for (int i = 0;i < mDataSet.length;i++){
mDataSet[i] = "This is item "+ i;
}
}
如果想实现类似淘宝的瀑布流效果,可以在设置布局管理器的时候使用:
//相比线性布局管理器多了一个参数 2 ,表示设置 2 列。
recyclerView.setLayoutManager(new GridLayoutManager(this,2));