首先要提醒大家:在Adapter中 getView方法内 有可能会循环的加载内容 比如说 你的List.size()的大小是2 但是在getView中的Position可能会运行多个循环 0,1,0,1,0,1 造成这种问题的原因是ListView的高度设为了wrap_content 如果将ListView的高度设为math则不会出现这种现象 可以理解为这是Android的一个Bug吧
源码下载地址:http://download.csdn.net/detail/v587ge/8603849
BaseAdapter getView中三种写法
<span style="font-size:18px;">// 最省内存的写法 因为不用重复的findViewById
ViewHolder viewHolder = null;
if (<span style="font-family: Arial, Helvetica, sans-serif;">convertView </span><span style="font-family: Arial, Helvetica, sans-serif;">== null) {</span>
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(R.layout.mlist, null);
viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if (mList.get(position) != null) {
viewHolder.tv_name.setText(mList.get(position).getName());
}
return convertView;
/*
* 最为普通的写法 每次都要FindViewByID convertView =
* LayoutInflater.from(mContext).inflate(R.layout.mlist, null); TextView
* tv = (TextView) convertView.findViewById(R.id.tv);
* tv.setText(mList.get(position));
*/
/*
* 最为笨的写法 每次都要FindViewByID 而且要浪费 给出的ConverView造成内存泄露 资源浪费 </span>
<span style="font-size:18px;"> * View view=</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">LayoutInflater.from(mContext).inflate(R.layout.mlist, null); TextView
</span><span style="font-size:18px;"> * tv = (TextView) view.findViewById(R.id.tv);
* tv.setText(mList.get(position));
*/
private static class ViewHolder {
TextView tv_name;
}</span>