- ListView的Adapter的优化布局加载器的加载次数最典型的用法是使用convertView进行优化,让convertView当做布局加载器的载体,也就是.重用 convertView
用以避免重复创建 View,重复创建 View 代价较大,而且如果重用 view 不改变宽高,重用View可以减少重新分配缓存造成的内存频繁分配/回收; - convertView = LayoutInflater.from(context).inflate(R.layout.子布局, null)
- 避免在 getView 中有 重复调用的 findViewById findViewById 的实现是遍历,如果你定义的 View 越复杂代价越大。 Google 推荐的做法是用 ViewHolder,然后保存在 view 的 tag 中。现在 RecyclerView 也是强制使用 ViewHolder 了。
findViewById因为Adapter中的getView方法执行好多次,所以需要优化,,那么典型的优化是是使用ViewHolder一说这个词你应该知道是怎样优化(不会的问百度)
- 就是优化item中的点击事件,
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = LinearLayout.inflate(R.layout.vlist, null);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.info = (TextView) convertView.findViewById(R.id.info);
holder.viewBtn = (Button) convertView.findViewById(R.id.view_btn);
//使用convertView复用点击事件
holder.title.setOnClickListener(holder);
holder.info.setOnClickListener(holder);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//使用传递参数的形式给点击事件设置内容.
//需要的话,就用addLIst传递过去需要的参数.
holder.addList(position,context);
holder.title.setText((String) mData.get(position).get("title"));
holder.info.setText((String) mData.get(position).get("info"));
return convertView;
}
}
//提取出来方便点
final class ViewHolder implements View.OnClickListener {
public TextView title;
public TextView info;
public Button viewBtn;
int mPosition;
Context context;
public void addList(int inPosition,Context context) {
mPosition = inPosition;
this.context = context;
}
@Override
public void onClick(View v) {
//写入item中的点击事件
//...
//v.getTag();
switch (v.getId()){
case R.id.title:
Toast.makeText(context, "点击了title----"+mPosition, Toast.LENGTH_SHORT).show();
break;
case R.id.info:
Toast.makeText(context, "点击了info====>>"+mPosition, Toast.LENGTH_SHORT).show();
break;
}
}
}
5.这样也就避免的在getView中进行耗时操作有空在更,,菜鸟欢迎指点,一起探讨listView的优化,,
6.就是让ListView在快速滑动的时候停止加载图片,有空补充.