ListView,就如其名,是用来显示列表的一种View,而RecycleView,是其的加强版,今天带来的是这两个几乎具有相同的功能的对比使用

先从ListView说起吧

ListView:

1.在布局文件中使用ListView,并为其定义一个id,方便我们之后的调用,宽高与父控件相同

2.准备数据,将数据添加到ArrayAdapter适配器当中

3.在Activity的java文件中使用findviewbyid找到ListView实例,为其设置Adapter

4.实现ListView的item项点击事件,直接使用Listview定义的setitemonClick方法就行了

这里最为重要的一步其实是第二步,我们可以看到下面的代码,定义了一组String类型的数组,之后创建ArrayAdapter适配器,注意String,是一个泛型,后面的构造函数里的参数分别为上下文android.R.Layout.simple_list_item 1是安卓系统给的一个item布局,最后一项是String数组,也就是数据,之后寻找ListView的实例,调用setAdapter方法设置适配器

  public class MainActivity extends AppCompatActivity {
private String[] data = {"Apple" ,"Banana","Orange","WatermeLon"
"Pear","Grape","Pineapple","Strawberry","Cherry","Mango",
"Apple","Banana","Orange" ,"Watermelon" ,"Pear" ,"Grape",
"Pineapple","Strawberry","Cherry","Mango"}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity.main);
ArrayAdapter<String> adapter = new ArrayAdapter<String(MainActivity.this, android.R.Layout.simple_list_item 1, data);
ListView listView = (ListView) findViewById(R.id.list _view);
listView.setAdapter(adapter);
}
}

这是一个简单的例子,但是,我们知道第二个参数是安卓提供的一个item布局,这个布局过于简单,我们想要实现一个自定义布局怎么办?我们需要改造一下ArrayAdapter这个适配器

下面便是自定义布局并使用的步骤:

1.创建一个item的布局,也就是我们的自定义布局

我定义了两个各占一半的textview,记得根标签的高使用wrap_content

2.定义一个T类,作为适配器的泛型,(类似之前的String),里面需要一个构造方法,成员变量和get方法

不知道为什么会有警告,用的public,可以正常使用,若是改为其他,另外那边调用就会出错了

3.创建一个适配器类,使其继承ArrayAdapter<T>(T就是第二步定义的类),里面需要一个构造方法,还需要复写getView方法

4.准备数据,将数据添加到第三步的适配器类中,之后与上面所说的步骤一样,找到Listview的实例,设置适配器

效果

RecycleView:

由于这个是Android团队新推出的,需要我们添加依赖才可以使用,记得点击sync now

使用步骤:

1.在布局文件中使用RecyclerView,定义id,宽高与空间相同

2.准备RecyclerView的子项item布局,之后要在适配器类中使用,这里就不在赘述

3.定义个泛型类,如之前在ListView中所说的T类,适配器的泛型

3.定义一个适配器T类,使其继承RecyclerView.Adapter<T.ViewHolder>(ViewHolder是T类中的一个内部类),需要一个构造方法接收数据源,复写三个方法

RecyclerAdapter是继承RecyclerView.Adapter<RecyclerAdapter.ViewHolder>

这个尖括号里的本来应该是RecyclerView.ViewHolder,但是我们在RecyclerAdapter里定义了一个内部类ViewHolder,使其继承了RecyclerView.ViewHolder,所以我们就可以在尖括号里直接调用内部类

我们先来看一下ViewHolder这个内部类,它里面有两个TextView的成员变量,之后,添加一个构造方法,参数是一个View,为这个两个textview通过findviewbyid找到实例

我们来看RecycleAdapter这个类,在开头我们就声明了一个List的成员变量students,之后,添加构造方法,传入一个LIst,将其赋值给RecycleAdapter的成员变量students

之后需要复写三个方法,OnCreateViewHolder,onBindViewHolder,getItemCount

onCreateViewHolder方法里面,首先就是通过LayoutInflater.from()方法接收一个context,之后,再通过inflate将item布局放进总布局中,之后再将这个view作为参数传到ViewHolder中去,同时,返回一个ViewHolder

onBindViewHolder方法,由list的get方法,获得list里面的某个对象,之后,由holder调用两个TextView的setText方法进行设置,举一反三,如果是imageview的话,同样可以使用setresource设置其显示的图片,设置的参数,我们可以直接由Student类中的get方法获得

getItemCount 就是获得全部item的数量,这里item数量其实就是list中的项目,直接返回其的size就行了

4.准备数据,添加到适配器中

5.创建一个布局管理器LayoutManager,便于RecycleView设置布局,这里布局管理器有几种

一种的像LIstView的垂直排列,LinearlayoutManager

我们也可以将其改为水平排列,只需调用linearLayoutManger的setOrientation,设置为LinearLayoutManager.HORIZONTAL

还有GiidLayout网格布局 StaggerGildLayoutManager瀑布流布局,使用方法如上,不过,参数有所区别,想了解更多请转百度

6.通过findviewbyid方法找到RecycleView的实例,为其设置LayoutManager,设置Adapter

7.设置onClick方法,RecycleView里没有onClick方法,需要我们自己写,在哪里写呢?在RecycleAdapter中的onBindViewHolder方法中

我们用Viewholder来找到子项,为其设置一个onClickListener,之后,为其设置onClick事件处理

上面这是比较简单的一种,还有其他几种方法,我在这也不一一测试,感兴趣的话可以自己研究研究

参考地址:http://blog.csdn.net/RaphetS/article/details/51254538

补充:RecyclerView更新数据

更新数据方法使用的是adpater的notifyDataSetChanged()方法

使用这个方法前,需要对原来的list做出相应的改变,mlist是之前用来new adpater中使用的list

更多的RecycleView高级使用,请参考下面的地址

http://blog.csdn.net/skykingf/article/details/50827141

http://www.jianshu.com/p/58ca20e1a5d6

Android ListView与RecycleView的对比使用的更多相关文章

  1. 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...

  2. android listview展示图片

    最近学习android开发,感触颇多,和网站开发对比,还是有很大的差距,在这里记录一下. android listview展示图片 在网站开发上,展示图片非常简单,一个HTML img标签就搞定,加上 ...

  3. android ListView 九大重要属性详细分析、

    android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...

  4. Android ListView onItemClick Not Work

    Android ListView onItemClick Not Work ListView item中有Button和RadioButton的时候,它的Item点击事件不起作用,需要设置item的属 ...

  5. Android和Linux应用综合对比分析

    原文地址:http://www.cnblogs.com/beer/p/3325242.html 免责声明: 当时写完这篇调查报告,给同事看了后,他觉得蛮喜欢,然后想把这篇文章修改一下,然后往期刊上发表 ...

  6. Android ListView 常用技巧

    Android ListView 常用技巧 Android TextView 常用技巧 1.使用ViewHolder提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每 ...

  7. Android listview addHeaderView 和 addFooterView 详解

    addHeaderView()方法:主要是向listView的头部添加布局addFooterView()方法:主要是向listView的底部添加布局 需要注意的是添加布局的时候应该添加从父容器开始添加 ...

  8. Android ListView滑动过程中图片显示重复错乱闪烁问题解决

    最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...

  9. Android --ListView分页

    参考博客:Android ListView分页加载(服务端+android端)Demo 监听OnScrollListener事件 class OnListScrollListener implemen ...

随机推荐

  1. python生成式

    本篇将介绍Python的列表生成式,更多内容请参考:Python列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个 ...

  2. Spring AOP分析(1) -- 基本概念

    AOP全称是Aspect Oriented Programming,面向切面编程,是面向对象编程(OOP:Object Oriented Programming)的补充和完善.一般在系统中,OOP利用 ...

  3. input 密码框调出手机的数字键盘

    对于某些密码,想要在手机上调出数字键盘,同时要隐藏文字.可结合type=tel和 text-security属性达到目的. input{ -webkit-text-security:disc; tex ...

  4. android版火狐调试器

    Remotely debugging Firefox for Android 使用火狐开发工具可以在桌面上进行远程代码的调试(FF26以上) 具体使用参考: https://developer.moz ...

  5. JSOUP教程,JSOUP 乱码处理,JSOUP生僻字乱码解决方案

    JSOUP乱码情况产生 这几天我用 JSOUP 多线程的方式,爬取了200 多万数据,数据为各地的地名相关.结果有小部分数据,不到 1 万乱码.我先检查了我的编码为UTF-8 ,觉得应该没有问题.代码 ...

  6. webmagic学习-使用注解编写爬虫

    写在前面: 官方文档:http://webmagic.io/docs/zh/posts/ch5-annotation/README.html WebMagic支持使用独有的注解风格编写一个爬虫,引入w ...

  7. Java多线程由易到难

    线程可以驱动任务,因此你需要一种描述任务的方式,这可以由Runnable接口来提供.要想定义任务,只需实现Runnable接口并编写run方法,使得该任务可以执行你的命令. public class ...

  8. Celery 源码解析五: 远程控制管理

    今天要聊的话题可能被大家关注得不过,但是对于 Celery 来说确实很有用的功能,曾经我在工作中遇到这类情况,就是我们将所有的任务都放在同一个队列里面,然后有一天突然某个同学的代码写得不对,导致大量的 ...

  9. java 分页导出百万级数据到excel

    最近修改了一个导出员工培训课程的历史记录(一年数据),导出功能本来就有的,不过前台做了时间限制(只能选择一个月时间内的),还有一些必选条件, 导出的数据非常有局限性.心想:为什么要做出这么多条件限制呢 ...

  10. CLR之委托的揭秘(二)

    杂谈 在开始真正的代码之前,分析一下上周的一些工作内容,发现自己在代码上还是有很多小毛病需要纠正和去更改的,首先之前一直疏于文档的整理,几乎很少去写文档,第二对于接口开发过程中缺少一定的严谨性,很多问 ...