Android BaseAdapter
来源:互联网 发布:巨杉数据库 王涛 编辑:程序博客网 时间:2024/05/16 09:18
BaseAdapter
当一个ListView设置了Adapter后,每次ListView刷新显示时会调用getCount()来确定需要显示的条目个数,然后重复调用getView(…)获取指定位置的View并绘制到指定位置上。
方便起见,一般列表中每个条目里包含的View在初始化时都会从布局文件得到(如LayoutInflater的inflate(…)方法)。
由于每个条目中的view一般都会包含多个view(如每个条目都是个包含两个ImageView的LinearLayout),然而条目的绘制更新需要设置每个子View的属性,此时多次的调用findViewById(…)会导致效率低下,于是常在第一次初始化列表的条目时就保存起来每个子View(View的setTag(Object)可以为一个View绑定一个数据,可以用此方法对每个条目对应的View容器绑定一个包含它的所有子View的对象,这就是所谓的ViewHolder)。
public class UnitAdapter extends BaseAdapter { private LayoutInflater inflater; ..... //一般会保存上列表的所有条目的内容,此处省略 public UnitAdapter(Context c) { inflater=LayoutInflater.from(c); }//构造函数根据需求创建,这里只为以后从布局文件得到View实例来说明问题 @Override public int getCount() { return count;//获得列表内条目数 } @Override public Object getItem(int position) { return item;//获取指定位置条目 } @Override public long getItemId(int position) { return position;//获取列表中指定位置的id,方便可直接返回position } static class ViewHolder { public View view1,view2....; }//为保存每个子View的一个类 @Override public View getView(int position, View convertView, ViewGroup parent) { //convertView: 此条目中保存的上一次绘制使用的view(容器) ViewHolder holder; if (convertView==null) { convertView=inflater.infalte(...);//条目首次绘制更新,直接对其从布局文件初始化 holder=new ViewHolder(); holder.view1=convertView.findViewById(...);//保存条目容器包含的子View holder.view2=....;//同上操作,保存所有子View /*对于一个从布局文件生成的View容器,其子View的id可认为是布局文件中指定的id(至少在findViewById中的使用可以使这样的),具体实现这里不做深究。*/ convertView.setTag(holder);//将子View的集合绑定在条目的View容器中,下次直接取用 } else { holder=(ViewHolder)convertView.getTag();//当前条目以初始化过,直接取用子View集合进行操作 } holder.view1......;//对条目中的子View详细操作,比如setText..... return convertView;//返回更新过的条目View容器 /* 在这里并未直接对convertView做修改,而的确更新了列表。 其实对象本身是以指针(认为是引用也一样的)的形式来传递的,在我们的holder得到了View容器的所有子View后,可以认为是holder保存了所有子View的地址,对holder的修改就是对convertView的子View的修改了(就像c的数组吧)。 */ }}
0 0
- Android --- BaseAdapter
- Android BaseAdapter
- android BaseAdapter
- Android BaseAdapter
- Android BaseAdapter
- Android BaseAdapter
- Android BaseAdapter
- Android BaseAdapter 例子
- Android BaseAdapter应用
- Android ListView理解,BaseAdapter
- 关于Android中的BaseAdapter
- android自定义 BaseAdapter
- Android ListView理解,BaseAdapter
- Android中的BaseAdapter使用说明
- Android------------BaseAdapter示例介绍
- Android ViewFlipper装载baseAdapter
- Android ListView BaseAdapter 分析
- Android Baseadapter 中的convertView
- NSCharacterSet 简单用法
- 数目的游戏
- 文学研究助手
- MySQL中concat函数
- 嵌入式软件段错误调试方法--core文件的使用(海思3520d电路板为例,附执行脚本)
- Android BaseAdapter
- [计服15] 5.18实验
- Leetcode no. 304
- <c:forEach>详解
- DataGridView窗体之间的传递
- [2014-9-9]反射
- [2014-9-10]异步编程
- [2014-9-11]异步编程继续
- HDU 3836 Equivalent Sets(强连通分量)