Android ListView与RecycleView的对比使用
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的对比使用的更多相关文章
- 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...
- android listview展示图片
最近学习android开发,感触颇多,和网站开发对比,还是有很大的差距,在这里记录一下. android listview展示图片 在网站开发上,展示图片非常简单,一个HTML img标签就搞定,加上 ...
- android ListView 九大重要属性详细分析、
android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...
- Android ListView onItemClick Not Work
Android ListView onItemClick Not Work ListView item中有Button和RadioButton的时候,它的Item点击事件不起作用,需要设置item的属 ...
- Android和Linux应用综合对比分析
原文地址:http://www.cnblogs.com/beer/p/3325242.html 免责声明: 当时写完这篇调查报告,给同事看了后,他觉得蛮喜欢,然后想把这篇文章修改一下,然后往期刊上发表 ...
- Android ListView 常用技巧
Android ListView 常用技巧 Android TextView 常用技巧 1.使用ViewHolder提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每 ...
- Android listview addHeaderView 和 addFooterView 详解
addHeaderView()方法:主要是向listView的头部添加布局addFooterView()方法:主要是向listView的底部添加布局 需要注意的是添加布局的时候应该添加从父容器开始添加 ...
- Android ListView滑动过程中图片显示重复错乱闪烁问题解决
最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...
- Android --ListView分页
参考博客:Android ListView分页加载(服务端+android端)Demo 监听OnScrollListener事件 class OnListScrollListener implemen ...
随机推荐
- JavaScrpit中异步请求Ajax实现
在前端页面开发的过程中,经常使用到Ajax请求,异步提交表单数据,或者异步刷新页面. 一般来说,使用Jquery中的$.ajax,$.post,$.getJSON,非常方便,但是有的时候,我们只因为需 ...
- Windows 编程,程序编译使用的命令行工具。
Windows 编程,程序编译使用的命令行工具. 1.cl.exe文件是Visual C\C++的编译器,它将程序源代码文件编译为obj文件. 2.rc.exe文件是资源编译器.工程项目中的.rc文件 ...
- C++ 随机生成一个(0,1)之间的小数
double p; ]; memset(s,,sizeof(s)); s[]='; s[]='.'; ;i<;i++) { s[i]=rand()%+'; } p=atof(s); cout & ...
- The Suspects(并查集维护根节点信息)
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 37090 Accepted: 17980 De ...
- sql语句练习题及答案
表结构 创建表数据 SET NAMES utf8; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- ...
- Linux中常见问题(磁盘 定时任务)
第1章 linux无法上网 1) 第一步,先ping域名. ping www.baidu.com 2)再ping一个公网ip , ping 223.5.5.5/223.6.6.6/114.11 ...
- vue.js项目安装
Vue.js 安装 NPM 方法安装vue.js项目 npm 版本需要大于 3.0,如果低于此版本需要升级它: # 查看版本 $ npm -v 2.3.0 #升级 npm npm install np ...
- Scrum Meeting Alpha - 9
Scrum Meeting Alpha - 9 NewTeam 2017/11/03 地点:新主楼F座二楼 任务反馈 团队成员 完成任务 计划任务 安万贺 完成了登陆退出功能Pull Request ...
- C#操纵Excel,此工作薄包含嵌入对象,Office 2007的设定方法
C#操纵Excel,插入OLE对象时报“此工作薄包含嵌入对象,EXCEL可能无法从这些对象中删除个人信息.”, 如网上所述,Office 2003可以通过“菜单>>工具>>选项 ...
- [转载] Linux内存管理之mmap详解
转载自http://blog.chinaunix.net/uid-26669729-id-3077015.html 一. mmap系统调用 1. mmap系统调用 mmap将一个文件或者其它对象映射进 ...