优化方向: 1、 利用convertView缓存的布局减少创建listview item的数量,尽可能复用以前创建的
2、利用viewholder机制,尽可能的减少 findviewbyid这一类的查找控件的操作。如果要复用布局,则同时将查找到的控件存储起来(setFlag),下次使用的时候可以直接用(getFlag)。
示例代码
示例代码解析:
见一个viewholder的类,把所有用到的控件都声明,如果该组建被创建的时候同时把这个类中的控件存储起来,下次如果复用 convertView的话,同时把之前存储的 找到的控件都取出来直接使用。注意 使用的话 相当于一个对象的属性 : 对象.控件 。 如下所示:
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return mAllData.size();
}
@Override
public Object getItem(int position) {
return mAllData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
convertView = View.inflate(getApplicationContext(), R.layout.listview_blacknumber_item, null);
viewHolder = new ViewHolder();
viewHolder.tvPhone = (TextView) convertView.findViewById(R.id.tv_phone);
viewHolder.tvMode = (TextView) convertView.findViewById(R.id.tv_mode);
viewHolder.ivDelete = (ImageView) convertView.findViewById(R.id.iv_delete);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.ivDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
viewHolder.tvPhone.setText(mAllData.get(position).getPhone());
viewHolder.tvMode.setText("多多岛");
return convertView;
}
}
class ViewHolder {
TextView tvPhone;
TextView tvMode;
ImageView ivDelete;
}