一、概述

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的更多相关文章

  1. MVC数据列表展示【三】

    一.控制器向视图传递参数的两种形式:使用到的技术有EF,linq表达式,StringBuilder,相关技术都可以在我的博客园中找到详细的技术介绍. 1. 第一种是通过字符通过foreach循环拼接将 ...

  2. [android] 手机卫士黑名单功能(列表展示)

    先把要拦截的电话号码保存到数据库中,拦截模式用个字段区分,1 电话拦截,2 短信拦截,3全部拦截 新建Activity类CallSmsSafeActivity.java 新建布局文件activity_ ...

  3. salesforce lightning零基础学习(七) 列表展示数据时两种自定义编辑页面

    上一篇Lightning内容描述的是LDS,通过LDS可以很方便的实例化一个对象的数据信息.当我们通过列表展示数据需要编辑时,我们常使用两种方式去处理编辑页面:Pop Up Window弹出修改详情以 ...

  4. Android 实现在Activity中操作刷新另外一个Activity数据列表

    做android项目中遇到这样一个问题:有两个acticity,一个显示好友列表,另外一个显示会话列表,现在问题是在会话界面增加一个添加好友功能,添加好友后要求实时的刷新好友列表. 想了想,找了两种方 ...

  5. Android数据分批载入-滑动究竟部自己主动载入列表

    Android数据分批载入-滑动究竟部自己主动载入列表 2014年5月9日 摘自:<Android高级开发实战-ui.ndk与安全> 本博文介绍怎样进行数据分批载入,在应用开发其中会常常使 ...

  6. django学习-27.admin管理后台里:对列表展示页面的数据展示进行相关优化

    目录结构 1.前言 2.完整的操作步骤 2.1.第一步:查看ModelAdmin类和BaseModelAdmin类的源码 2.2.第二步:查看表animal对应的列表展示页面默认的数据展示 2.3.第 ...

  7. Android数据存储之GreenDao 3.0 详解

    前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...

  8. Winform开发主界面菜单的动态树形列表展示

    我在之前很多文章里面,介绍过Winform主界面的开发,基本上都是标准的界面,在顶部放置工具栏,中间区域则放置多文档的内容,但是在顶部菜单比较多的时候,就需要把菜单分为几级处理,如可以在顶部菜单放置一 ...

  9. Android权限列表permission说明

    网络上不乏android权限列表,但是很少有将列表和使用方法放在一起的,所以特此总结一下 需要在AndroidManifest.xml中定义相应的权限(以获取internet访问权限为例),如下: & ...

随机推荐

  1. Linux常用命令之权限管理

    在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录,这也让linux更安全.下面主要讲解下常用的权限命令chgrp,chmod,chown . 1.文 ...

  2. Java回收机制概述

    Java技术体系中所提倡的 自动内存管理 最终可以归结为自动化地解决了两个问题:给对象分配内存 以及 回收分配给对象的内存,而且这两个问题针对的内存区域就是Java内存模型中的 堆区. 垃圾回收机制的 ...

  3. 用原生JS实现AJAX和JSONP

    前端开发在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的.其实,原生 ...

  4. 依赖注入在 dotnet core 中实现与使用:1 基本概念

    关于 Microsoft Extension: DependencyInjection 的介绍已经很多,但是多数偏重于实现原理和一些特定的实现场景.作为 dotnet core 的核心基石,这里准备全 ...

  5. 消息中间件——RabbitMQ(四)命令行与管控台的基本操作!

    前言 在前面的文章中我们介绍过RabbitMQ的搭建:RabbitMQ的安装过以及各大主流消息中间件的对比:,本章就主要来介绍下我们之前安装的管控台是如何使用以及如何通过命令行进行操作. 1. 命令行 ...

  6. 既然synchronized是"万能"的,为什么还需要volatile呢?

    在我的博客和公众号中,发表过很多篇关于并发编程的文章,之前的文章中我们介绍过了两个在Java并发编程中比较重要的两个关键字:synchronized和volatile 我们简单回顾一下相关内容: 1. ...

  7. 利用QGIS下载地图数据

    这段时间做了一些利用地理信息进行定位导航的系列工作,其中很重要的一部分是如何获取到地图数据,比如道路的矢量图.某一区域的栅格图,我用到的主要工具是QGIS.QGIS是一个跨平台的免费应用,其中集成了对 ...

  8. javascript导出csv文件(excel)

    这里贴出JavaScript导出csv文件(excel)的代码. /** * 导出excel * @param {Object} title 标题列key-val * @param {Object} ...

  9. C#表达式树浅析

    一.前言 在我们日常开发中Lamba 表达式经常会使用,如List.Where(n=>Name="abc") 使用起来非常的方便,代码也很简洁,总之一个字就是“爽”.在之前我 ...

  10. JD面试 || 移除教室人数

    在昨天参加了东哥的笔试,选择题做的还算可以,但是还有道编程题和关于jdk8的Stream特性难住了.鉴于此用博客总结一下这道编程题,并结合Stream特性来简化代码,熟悉Api. 题目描述 某校在积极 ...