Android数据列表展示之 RecylerView
一、概述
1.RecyclerView是什么?
RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式。该控件用于在有限的窗口中展示大量数据集,它被作为ListView和GridView控件的继承者。RecyclerView高度解耦,异常灵活,通过设置不同LayoutManager,ItemDecoration , ItemAnimator实现令人想象不到的效果
2.RecyclerView怎么用?
既然RecyclerView的出现是为了要替换ListView和GridView,那么他们必有共通之处,,是的他们都是通过适配器来绑定数据的。
所以RecyclerView需要有如下东西支持:
1.Datas : 要显示的数据集合
2.Adapter:适配器,绑定数据集
3.ViewHolder:根据当前数据保存视图,其实就是列表数据的单个item布局
4.LayoutManager:布局管理者,决定列表数据摆放格式,是按照listview方式摆放还是按照gridview方式摆放,又或者是按照瀑布流方式,这就是Recyclerview强大的地方
5.ItemDecoration:列表的分割器,Recyclerview默认没有给我们提供分割线,需自定义,后续会给出代码
6.ItemAnimator: 当列表item被“添加”、“删除”,“位置变动”时执行什么动画,强大吧!
7.Listener: item事件监听,RecyclerView默认不提供OnItemClickListener 点击事件,需我们自定义,灵活使用。
二、RecyclerView的详细用法
1.适配器和普通的适配器不一样,需要继承RecyclerView.Adapter
2.listview使用时为了使用缓存,我们会定义一个ViewHolder类去存放布局控件,而RecyclerView 默认就支持这种方式,是不是更加方便了。
public class UserAdapter extends RecyclerView.Adapter {
private List<UserBean> userBeanList;
private Context mContext;
public UserAdapter(Context context,List<UserBean> userBeanList){
mContext = context;
this.userBeanList = userBeanList;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(mContext,R.layout.item_recycler_view,null);
return new UserViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof UserViewHolder){
UserViewHolder userViewHolder = (UserViewHolder) holder;
UserBean userBean = userBeanList.get(position);
userViewHolder.name.setText(userBean.getName());
userViewHolder.number.setText(userBean.getNumber());
}
}
@Override
public int getItemCount() {
return userBeanList!=null?userBeanList.size():0;
}
class UserViewHolder extends RecyclerView.ViewHolder{
private TextView name;
private TextView number;
public UserViewHolder(View itemView) {
super(itemView);
init(itemView);
//给列表item点击点击事件
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(itemClickListener!=null){
itemClickListener.onItemClick(v,getLayoutPosition());
}
}
});
}
private void init(View view){
name = (TextView) view.findViewById(R.id.tv_name);
number = (TextView) view.findViewById(R.id.tv_number);
}
}
//对外部暴漏点击事件接口
public interface OnItemClickListener{
void onItemClick(View v,int position);
}
public OnItemClickListener itemClickListener;
public void setItemClickListener(OnItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
}
运行效果:


源码地址:https://yunpan.cn/cu782gq6cEPD8 (提取码:a20d)
Android数据列表展示之 RecylerView的更多相关文章
- MVC数据列表展示【三】
一.控制器向视图传递参数的两种形式:使用到的技术有EF,linq表达式,StringBuilder,相关技术都可以在我的博客园中找到详细的技术介绍. 1. 第一种是通过字符通过foreach循环拼接将 ...
- [android] 手机卫士黑名单功能(列表展示)
先把要拦截的电话号码保存到数据库中,拦截模式用个字段区分,1 电话拦截,2 短信拦截,3全部拦截 新建Activity类CallSmsSafeActivity.java 新建布局文件activity_ ...
- salesforce lightning零基础学习(七) 列表展示数据时两种自定义编辑页面
上一篇Lightning内容描述的是LDS,通过LDS可以很方便的实例化一个对象的数据信息.当我们通过列表展示数据需要编辑时,我们常使用两种方式去处理编辑页面:Pop Up Window弹出修改详情以 ...
- Android 实现在Activity中操作刷新另外一个Activity数据列表
做android项目中遇到这样一个问题:有两个acticity,一个显示好友列表,另外一个显示会话列表,现在问题是在会话界面增加一个添加好友功能,添加好友后要求实时的刷新好友列表. 想了想,找了两种方 ...
- Android数据分批载入-滑动究竟部自己主动载入列表
Android数据分批载入-滑动究竟部自己主动载入列表 2014年5月9日 摘自:<Android高级开发实战-ui.ndk与安全> 本博文介绍怎样进行数据分批载入,在应用开发其中会常常使 ...
- django学习-27.admin管理后台里:对列表展示页面的数据展示进行相关优化
目录结构 1.前言 2.完整的操作步骤 2.1.第一步:查看ModelAdmin类和BaseModelAdmin类的源码 2.2.第二步:查看表animal对应的列表展示页面默认的数据展示 2.3.第 ...
- Android数据存储之GreenDao 3.0 详解
前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...
- Winform开发主界面菜单的动态树形列表展示
我在之前很多文章里面,介绍过Winform主界面的开发,基本上都是标准的界面,在顶部放置工具栏,中间区域则放置多文档的内容,但是在顶部菜单比较多的时候,就需要把菜单分为几级处理,如可以在顶部菜单放置一 ...
- Android权限列表permission说明
网络上不乏android权限列表,但是很少有将列表和使用方法放在一起的,所以特此总结一下 需要在AndroidManifest.xml中定义相应的权限(以获取internet访问权限为例),如下: & ...
随机推荐
- 关于Java虚拟机运行时数据区域的总结
Java虚拟机运行时数据区域 程序计数器(Program Counter) 程序计数器作为一个概念模型,这个是用来指示下一条需要执行的字节码指令在哪. Java的多线程实际上是通过线程轮转做到的,如果 ...
- python 列表的增删改查
列表 有序可变的,索引 作用:存储数据的,支持很多种数据类型 定义方式: lst = [1,"alex",True,('a','b')]增 append() # 追加 extend ...
- spring架构解析--入门一
Spring 框架中的核心组件只有三个:Core.Context 和 Beans.它们构建起了整个 Spring 的骨骼架构.简单理解: spring core是工具,context是环境,而bean ...
- 如何在GitHub上删除自己的项目?
话不多说,直奔主题~ 1.打开GitHub,在主页左边有自己写的库. 2.拿删除第二个库wlh-hub/vue-zsgc为例,点击它,进入下面页面. 3.在导航栏一栏中,找到settings,并点击. ...
- final,权限,引用类型数据
1. final关键字 1.概述 为了避免子类出现随意改写父类的情况,java提供了关键字final,用于修饰不可改变内容 final:不可改变,可以修饰类,方法和变量 类:被修饰的类,不能用于继承 ...
- Linux配置及指令
目录 Linux配置及指令 一.linux中常用软件的安装 二.主机名和网络 1.修改主机名 2.设置网络 三.关闭防火墙 1.检查防火墙是否开启 2.清除策略 3.永久关闭第一个防火墙 4.关闭第二 ...
- Django2.2中间件详解
中间件是 Django 用来处理请求和响应的钩子框架.它是一个轻量级的.底层级的"插件"系统,用于全局性地控制Django 的输入或输出,可以理解为内置的app或者小框架. 在dj ...
- 数据库炸了——是谁动了我的wait_timeout
1.起因 隐约听到坐在我对面的测试说测试环境的接口有问题 他们一番商讨后,朝我这边反馈说,现在测试环境的接口报504 我条件反射的回了句那是接口超时,再多试几次(测试环境的性能比较差,尤其是数据库,经 ...
- 车载多传感器融合定位方案:GPS +IMU+MM
导读 高德定位业务包括云上定位和端上定位两大模块.其中,云上定位主要解决Wifi指纹库.AGPS定位.轨迹挖掘和聚类等问题:端上定位解决手机端和车机端的实时定位问题.近年来,随着定位业务的发展,用户对 ...
- 盘一盘 NIO (一)—— Buffer源码解析
Buffer是个啥? Buffer 即缓冲区,用来暂存输入输出数据的区域.Buffer对象是一份固定数量的数据的容器,实质上是一个数组.但是一个缓冲区不仅仅是一个数组,缓冲区提供了对数据的结构化访问, ...