Android笔记之Adapter
来源:互联网 发布:淘宝怎么使用农村淘宝 编辑:程序博客网 时间:2024/06/10 07:08
适配器. 顾名思义,就是把一些数据给弄得适当,适合以便于在View上显示。可以看作是界面数据绑定的一种理解。它所操纵的数据一般都是一些比较复杂的数据,如数组,链表,数据库,集合等。适配器就像显示器,把复杂的东西按人可以接受的方式来展现。那么适配器是怎么处理得到的数据,并把它显示出来的呢。其实很简单,说白了适配器它也是一个类,在类里面它实现了父类的这几个方法:
publicint getCount() //得到数据的行数
public Object getItem(int position)//根据position得到某一行的记录
public long getItemId(int position)//得到某一条记录的ID下面这个方法是最重要的相比于其它几个方法,它显式的定义了,适配器将要以什么样的方式去显示我们所填充的数据,在自定义的适配器里面我们通常会给它写个布局文件publicView getView(int position, View convertView, ViewGroup parent)
Android中有个叫做Recycler(反复循环器)的构件,下图是它的工作原理:
ViewHolder只是将需要缓存的那些view封装好,convertView的setTag才是将这些缓存起来供下次调用
当你的listview里布局多样化的时候 viewholder的作用就有比较明显的体现了。 当然了,单一模式的布局一样有性能优化的作用 只是不直观。 假如你2种模式的布局 当发生回收的时候 你会用setTag分别记录是哪两种 这两种模式会被封装到viewholder中进行保存方便你下次使用。 VH就是个静态类 与缓存无关的
以上ConvertView ViewHolder 及 set/getTag 都是性能优化的关键
以下为主要代码
public class MyAdapter extends BaseAdapter { private LayoutInflater layoutInflater; private List<ItemBean> dataList; public MyAdapter(Context context , List<ItemBean> list) { layoutInflater = LayoutInflater.from(context); dataList = list; } @Override public int getCount() { return dataList.size(); } @Override public Object getItem(int position) { return dataList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null){ holder = new ViewHolder(); //由于我们只需要将XML转化为View,并不涉及到具体的布局,所以第二个参数通常设置为null convertView = layoutInflater.inflate(R.layout.item,null); holder.img = (ImageView) convertView.findViewById(R.id.iv_image); holder.title = (TextView) convertView.findViewById(R.id.tv_title); holder.content = (TextView) convertView.findViewById(R.id.tv_content); convertView.setTag(holder); }else { holder = (ViewHolder) convertView.getTag(); } //取出bean对象 ItemBean bean = dataList.get(position); //设置控件的数据 holder.img.setImageResource(bean.itemImage); holder.title.setText(bean.itemTitle); holder.content.setText(bean.itemContent); return convertView; }
呵呵 自知让人理解有点困难 就当我的学习笔记了!
1 0
- Android笔记之Adapter
- Android学习笔记之Adapter
- Android开发笔记之Adapter用法
- Android学习笔记 - Adapter
- Android之Adapter系列之Adapter接口
- Android 之Adapter
- android之Adapter
- Android之Adapter
- Android之adapter详解
- android之Adapter
- Android基础之Adapter
- Android之自定义Adapter
- Android之Adapter用法
- Android之Adapter(适配器)
- Android之Adapter用法
- Android之Adapter优化
- Android之Adapter优化
- Android之Adapter优化
- 模板-欢迎使用CSDN-markdown编辑器
- MySQL 字段属性(约束)
- mysql启动问题access denied for user 'root'@'localhost'(using password:YES)
- LeetCode[357] Count Numbers with Unique Digits
- BZOJ1002: [FJOI2007]轮状病毒
- Android笔记之Adapter
- HDU1969 Pie
- Python 小甲鱼教程 课后练习42
- Linux命令----磁盘管理
- Java千百问_09基础类库(002)_util包有什么功能
- 2048小游戏开发过程以及感想
- 对HashMap对象的键值对内容进行排序
- CSS——选择器
- poj1979 Red and Black