Android ListView解析
来源:互联网 发布:模拟登陆知乎 编辑:程序博客网 时间:2024/05/18 17:26
ListView是我们的Android项目中常用的组件,以垂直列表的形式显示列表项。
一、Adapter
说到ListView就不得不说Adapter,ListView不会直接与数据源打交道,Adapter是ListView和数据源之间的桥梁 。我们常通过extends BaseAdapter实现自己的Adapter。
public class MyAdapter extends BaseAdapter { @Override public int getCount() { // How many items are in the data set represented by this Adapter. return 0; } @Override public Object getItem(int position) { // Get the data item associated with the specified position in the data set. return null; } @Override public long getItemId(int position) { // Get the row id associated with the specified position in the list. return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // Get a View that displays the data at the specified position in the data set. return null; }}
二、ListView
工作原理
ListView初始化加载数据的时候会调用adapter的getCount()方法得到item的数量,通过adapter的getView得到position的View,但是并不会将所有的position都通过getView()得到View,而是仅仅为当前手机屏幕上所能显示的position去getView()。
缓存机制
随着手指的移动,移出屏幕的position的View会被加入到RecyleBIn中进行缓存,而有新的position需要显示时,会从缓存中获取View。
ListView性能优化
在BaseAdapter的getView()方法中有个参数叫convertVIew,它就是listView在RecycleBin的缓存的View,目的就是为了避免不停地Inflate layout,实现对View的重用。如下图:
public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null) { convertView = layoutInflater.inflate(R.layout.list_item, null); } TextView textView = convertView.findViewById(R.id.projectName); textView.setText(list.get(position)); return convertView; }
但是这样每次还要为布局里的子控件去findViewById, 为了进一步优化ListView,我们可以使用VIewHolder将每一个convertView绑定起来,这样的话就可以避免每次使用convertView都要去为子控件findViewById一次。
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(convertView == null){ viewHolder = new ViewHolder(); convertView = layoutInflater.inflate(R.layout.list_item,,null); viewHolder.textView = (TextView) convertView.findViewById(R.id.projectName); convertView.setTag(viewHolder); } else{ viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.textView.setText(list.get(position)); return convertView; } class ViewHolder{ public TextView textView; }
0 0
- Android ListView完全解析
- android源码解析--ListView
- [android] listView解析
- android源码解析--ListView
- Android listview 属性解析
- Android ListView解析
- android listview源码解析
- Android中ListView用法解析
- Android ListView工作原理解析
- 【android】ListView工作原理解析
- Android ListView常用属性解析
- android源码解析--ListView(上)
- android ListView 几个重要属性解析
- Android ListView CheckBox状态错乱解析
- Android ListView工作原理完全解析
- Android RecyclerView 使用解析,替代ListView
- Android ListView滚动条配置完全解析
- Android开发:ListView、AdapterView、RecyclerView全面解析
- socket,tcp,http三者之间的区别和原理
- UIView学习笔记
- Android 单选按钮设置默认值
- Spark运行环境的安装(Standalone)
- mysql查询笔记
- Android ListView解析
- Add.html Add.php
- 运算符
- openwrt: Makefile 框架分析
- 训练1-4
- C#中 DataGridView 属性说明(转载)
- 如何在 OSX 中開啟多個 Eclipse
- Hibernate使用过程遇到的坑
- qt webview 忽略 ssl错误 ignoreSslErrors