Android RecyclerView之最基本使用教程完整示例(列表/分隔线/点击事件响应/水波纹特效等实现)
迪丽瓦拉
2025-05-31 00:04:44
0

前面几篇文章我们学了Listview的一些基本使用和面向实用优化性的一些进阶自定义用法。这篇文章开始学习RecyclerView,还是先从一个最简单的示例开始。

本篇文章我们将用RecyclerView实现如下效果图(实现一个带分隔线有点击事件的列表,类似Listview ArrayAdapter的示例)

 Listview的实现传送门:Android Listview ArrayAdapter示例_左眼看成爱的博客-CSDN博客

前言:

从IDE中我们可以看到,Listview控件已经被谷歌边缘化了。存放在Legacy分类下,legacy在英语中就是过期,遗产的意思。意思是这个控件即将退出历史舞台。

两者差别:

相同点:
都可以实现垂直方向的滚动列表效果;
都需要使用适配器(Adapter)
都能自定义适配器实现复杂场景需求不同点:
ListView只能实现垂直滚动列表,
RecyclerView不但能实现垂直滚动列表还可以实现水平、多列、跨列等复杂的滚动列表;
RecyclerView还可以实现网格、瀑布流等复杂的应用场景布局,且默认强制使用ViewHolder,性能更强;
RecyclerView不但需要自定义Adapter,还必须有LayoutManager,用法更复杂一些。
RecyclerView实现的列表默认没有水波纹变色等点击特效,而Listview则无需任何设置直接就有
ListView有setOnItemClickListener 鼠标点击事件监听接口,而RecyclerView没有。需自己去实现.
RecyclerView可实现复杂的自定义功能,比如动画特效,边框线等。这些都是Listview没有的总结:
ListView能做到的,RecyclerView都能做到,反之则不行。
RecyclerView用法比ListView更复杂。
一些简单的列表场景没有特殊性能要求。建议使用Listview更简单方便
一些数据量不大的垂直滚动列表也建议使用Listview来实现更方便简单.

示例实现步骤:

1,使用RecylerView需要先导依赖包

implementation 'androidx.recyclerview:recyclerview:1.1.0'

MainActivity代码如下:

package com.example.RecyclerView_BaseTest;import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final String[] citys = {"上海","北京","天津","江苏","河南","西藏","新疆","湖南","湖北"};RecyclerView recyclerView =findViewById(R.id.recyview);//设置线性布局LinearLayoutManager,也可以是GridLayoutManager(网格布局),StaggeredGridLayoutManager(瀑布流)LinearLayoutManager layoutManager= new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false);recyclerView.setLayoutManager(layoutManager);//recyclerView.setLayoutManager(new LinearLayoutManager(this));//设置适配器MyAdapter adapter =new MyAdapter(this,citys);recyclerView.setAdapter(adapter);}
}

item布局:



主布局文件:



MyAdapter适配器

package com.example.RecyclerView_BaseTest;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;/*** @author wh445306* @version 1.0* @Description MyAdapter for RecyclerView* @Date 2023-03-18 15:07*/public class MyAdapter extends RecyclerView.Adapter{LayoutInflater mInflater; //声明布局填充器String[] list;Context context; //声明上下文//构造方法public MyAdapter(Context context, String[] list) {mInflater = LayoutInflater.from(context); //获取布局服务this.list=list;this.context=context;}//用于创建ViewHolder实例,并加载Item布局@NonNull@Overridepublic MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = mInflater.inflate( R.layout.list_item, parent, false);//View view = LayoutInflater.from(parent.getContext()).inflate( R.layout.list_item, parent, false);MyViewHolder myViewHolder = new MyViewHolder(view);return myViewHolder;}//用于将获取的数据绑定到对应的控件上@Overridepublic void onBindViewHolder(@NonNull MyAdapter.MyViewHolder holder, final int position) {holder.txt.setText(list[position]);//添加点击事件监听holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(context, list[position], Toast.LENGTH_SHORT).show();}});}//获取列表条目的总数@Overridepublic int getItemCount() {return list.length;}//自定义内部类 ViewHolderpublic static class MyViewHolder extends RecyclerView.ViewHolder{TextView txt;public MyViewHolder(@NonNull View itemView) {super(itemView);txt=itemView.findViewById(R.id.txtcity);}}
}

代码中全部都有注释,且很多地方都有多种实现方法。其中一种注释后保留做为参考。相信一看就明白了。没有过多的内容。只是实现一个简单的垂直列表。如果您想实现其它的效果,可以从MainActivity中修改布局管理器即可实现布局切换:

设置线性布局LinearLayoutManager,
也可以是GridLayoutManager(网格布局),
StaggeredGridLayoutManager(瀑布流)

如何实现示例效果图中的类似Listview的官方默认的框线?:

//设置divider框线
DividerItemDecoration divider=new DividerItemDecoration(this,layoutManager.getOrientation());
recyclerView.addItemDecoration(divider);参考:
https://blog.csdn.net/minwenping/article/details/76148422

如何实现Listview默认自带的Item点击水波纹变色点击效果呢?,参考这里:

android - RecyclerView facing small Issues - Stack Overflow

或者:用一行代码在Android Studio给RecyclerView添加点击效果(水波纹/点击变色)_android recyclerview点击效果_学疯了的博客-CSDN博客 RecyclerView 实现item点击水波纹动画_小蜗牛在漫步的博客-CSDN博客

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...