安卓使用RecyclerView渲染组件

RecyclerView 是 Android 中用于显示大量数据集合的高性能列表控件

1.安装依赖

arduino 复制代码
implementation 'androidx.recyclerview:recyclerview:1.2.1'

2.定义渲染容器xml

xml 复制代码
<!-- activity_main.xml -->
<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

3.定义列表项布局

xml 复制代码
<!-- list_item_layout.xml -->
<TextView
    android:id="@+id/textView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"/>

4.创建ViewHolder

用于获取列表项的一些具体组件,方便后期直接通过这个ViewHolder能够直接选中指定的一些TextView,Button,ImageView等等

scala 复制代码
    public class ViewHolder extends RecyclerView.ViewHolder {
        public TextView textView;

        public ViewHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView);
        }
    }

5.创建适配器

创建一个继承自 RecyclerView.Adapter 的适配器类,用于管理数据和绑定数据到视图,将刚刚创建的ViewHolder通过泛型传进去,构造器接收外部传入的数据

scala 复制代码
public class MyAdapter extends RecyclerView.Adapter<ViewHolder> {

    private List<String> dataList;

    public MyAdapter(List<String> dataList) {
        this.dataList = dataList;
    }

}

6.实现父类的三个方法alt+enter快捷键,详细带

less 复制代码
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return null;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

}

@Override
public int getItemCount() {
    return 0;
}

7.实现onCreateViewHolder方法

刚刚第4步的时候是预设了一个创建好的ViewHolder,这个方法主要是创建一个真实的ViewHolder,主要是利用LayoutInflater.from创建一个布局,最后将这个布局塞到ViewHolder里面使用,和第4步融合

less 复制代码
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item,null,false);

    return new ViewHolder(view);
}

8.实现onBindViewHolder

这个方法主要是为了绑定用户数据到视图上,结合第4,7步,达到闭环

less 复制代码
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    holder.textView.setText(datalist.get(position));
}

9.实现getItemCount方法

csharp 复制代码
@Override
public int getItemCount() {
    return datalist.size();
}

10.activity使用

主要是选中第1步的容器,设置一个布局管理,然后将预制的动态数据放进刚刚的适配器中,传给recycler的方法。

ini 复制代码
RecyclerView recyclerview = findViewById(R.id.recyclerView);
recyclerview.setLayoutManager(new LinearLayoutManager(this));
List<String> stringList = Arrays.asList("Item 1", "Item 2", "Item 3");
recyclerview.setAdapter(new MyAdater(stringList));
相关推荐
jay神1 小时前
基于 YOLOv8 的手势识别系统(Web 版)
前端·人工智能·python·深度学习·yolo·计算机视觉·计算机毕业设计
屏什么录1 小时前
长时间录屏中途崩溃:MP4 打不开的 6 种救回方案与参数设置
前端·音视频开发
code_Bo1 小时前
不只命令行:我把跨 Agent 会话同步做成了桌面应用
前端·javascript·后端
kyriewen2 小时前
AI 能把页面写出来,为什么改个需求就开始崩?
前端·javascript·人工智能
涛涛ing3 小时前
2026年最值得关注的前端变化,藏在“默认值”里
前端
亿元程序员5 小时前
太牛了!这AI做出来的游戏,居然还能变现!
前端
hellice5 小时前
闪传 FlashDrop 实战:我用 300 行 Node 代码做了个「4 位取件码」临时文件中转站
前端·产品
用户0829773260055 小时前
RTX 5500 MIG 踩坑记录:切分之后模型跑不起来,排错整整一下午
前端
Lank_M5 小时前
AI 放大后的图更清楚,但它不能当原图入库
前端
Swot5 小时前
SvelteKit 数据流研究:`+page.js` 和 `+page.server.js` 到底谁在跑,数据又去了哪儿
前端·后端