Adapter的作用是界面与数据之间的桥梁,通过设置适配器至ListView控件后(如调用ListView的 setAdapter(ListAdapter adapter)
),列表的每一项会显示至页面中。其实,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View,如:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return super.getView(position, convertView, parent);
}
我们看一看下面的这段代码:
public View getView(int position, View convertView, ViewGroup parent) {
View newView = mInflater.inflate(R.layout.list_item, null);
((TextView) newView .findViewById(R.id.text)).setText(DATA[position]);
((ImageView) newView .findViewById(R.id.icon)).setImageBitmap(
(position & 1) == 1 ? mIcon1 : mIcon2);
return newView ;
}
上面的代码块中,我通过LayoutInflater.inflate(,)将Layout文件--layout.list_item转换为View.
(注:Layout也是View的子类,但在android中如果想将xml中的Layout转换为View放入.java代码中操作,只能通过Inflater,而不能通过findViewById())
这时,如果我的ITEM项有数以千条这样多或更多呢,再以上面代码块的写法,后果自己想想吧。

于是,改用其它一种写法:
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
}
((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]);
((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap(
(position & 1) == 1 ? mIcon1 : mIcon2);
return convertView;
}
这时,上面的代码是不是好了很多?系统将会减少创建很多View。性能得到了很大的提升。
到这里,问一下,还有没有优化的方法呢,是有的,请看————》》:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(DATA[position]);
holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
return convertView;
}

static class ViewHolder {
TextView text;
ImageView icon;
}

更多相关文章

  1. Android 自制一个工作日历 原代码
  2. android 网络视频代码
  3. android版本更新代码
  4. 系出名门 Android源代码
  5. Android应用程序安装过程源代码分析(3)
  6. Android开发——控件基础(七)ListView组件:示例代码
  7. android仿今日头条个人中心页面
  8. Ubuntu 13.04 编译环境配置及android 2.3 源代码编译时出现了以
  9. Android应用程序安装过程源代码分析(4)

随机推荐

  1. Android json数据解析
  2. [置顶] 《老罗的Android之旅》导读PPT
  3. Android通过SOCKET下载文件的方法
  4. Android之多媒体扫描过程
  5. android studio 加载第三方类库
  6. Android获取联系人姓名和电话
  7. Android Base64转换图片,SimpleAdapter动
  8. RelativeLayout+include产生的问题
  9. Android超详细环境搭建方法!
  10. dialog效果