2个要素:LayoutManager和Adapter
必须都设置,不然显示就是空的
LayoutManager布局管理器
内置的LayoutManager包含3个:
- LinearLayoutManager 线性布局
- GridLayoutManager 网格布局
- StaggeredGridLayoutManager 瀑布流布局
网格布局和瀑布流布局的区别,就是LayoutManager 不同
瀑布流:item图片高度设置wrap_content
网格布局:item图片高度设置固定高度
Adapter布局适配器
用来将数据填充到页面上,包含数据,view视图
public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.VideoViewHolder> {
private List<InsideResult> mDataList;
public VideoAdapter(List<InsideResult> dataList) {
this.mDataList = dataList;
}
public static class VideoViewHolder extends RecyclerView.ViewHolder {
ImageView ivCover;
TextView tvTitle;
public VideoViewHolder(@NonNull View itemView) {
super(itemView);
//获取view
ivCover = itemView.findViewById(R.id.iv_cover);
tvTitle = itemView.findViewById(R.id.tv_title);
}
}
@NonNull
@Override
public VideoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//创建viewHolder
//需要一个itemView
//先创建itemView
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_video, parent, false);
return new VideoViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull VideoViewHolder holder, int position) {
//绑定:将数据填充到view上
//view:就是holder的itemView
//数据:列表中索引为position的数据
InsideResult item = mDataList.get(position);
holder.tvTitle.setText(item.getTitle());
}
@Override
public int getItemCount() {
//获取总共有多少条数据,就是我们传进来数据列表的长度
return mDataList.size();
}
}
itemView的xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="8dp">
<ImageView
android:id="@+id/iv_cover"
android:layout_width="100dp"
android:layout_height="100dp"/>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"/>
</LinearLayout>
xml布局:
RecyclerView中还可以直接设置布局和方向
LinearLayoutManager 线性布局
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:orientation="vertical"
GridLayoutManager 网格布局
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="6"
android:orientation="vertical"
StaggeredGridLayoutManager 瀑布流布局
app:layoutManager="androidx.recyclerview.widget.StaggeredGridLayoutManager"
android:orientation="vertical"
app:spanCount="2"
分割线
github主页https://github.com/huangxiaolianghh/XRecyclerViewDivider
添加依赖
implementation 'com.github.HHotHeart:XRecyclerViewDivider:1.0.1'
添加代码(网格的分割线)
RecyclerView.ItemDecoration decoration = new XGridBuilder(view.getContext())
.setVLineSpacing(15f)
.setHLineSpacing(10f)
//是否包括边界
.setIncludeEdge(false)
.setVerticalIncludeEdge(false)
.build();
binding.rvList.addItemDecoration(decoration);
添加代码(线性的分割线)
RecyclerView.ItemDecoration decoration = new XLinearBuilder(view.getContext())
.setSpacing(24f)
.build();
getBinding().rvBalls.addItemDecoration(decoration);