我有一个CustomCursorAdapter来做漂亮的部分标题。我从ListView行中删除了所有图像,但滚动仍然相当滞后。有人知道优化这种方法吗?即使对于2000个联系人,Viber for Contacts等应用程序的滚动也非常顺畅。谢谢!
public View getView(int position, View convertView, ViewGroup parent) {
final int type = getItemViewType(position);
if (type == TYPE_HEADER) {
if (convertView == null) {
final LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(R.layout.list_header, parent,
false);
}
((TextView) convertView.findViewById(R.id.list_header_title))
.setText((String) getSections()[getSectionForPosition(position)]);
return convertView;
} else {
View v = super.getView(
position
- sectionToOffset
.get(getSectionForPosition(position)) - 1,
convertView, parent);
int contactIdCol = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
String contactId_text = c.getString(contactIdCol);
boolean flag = db.isRegistered(contactId_text);
ImageView iv = (ImageView) v.findViewById(R.id.typeImage);
if (flag) {
iv.setImageResource(R.drawable.rocket);
} else {
iv.setMinimumHeight(Config.getIconSize(context));
iv.setMinimumWidth(Config.getIconSize(context));
iv.setImageDrawable(null);
}
ImageView iv1 = (ImageView) v.findViewById(R.id.test);
cl.displayImage(contactId_text, iv1);
return v;
}
}
为了进一步澄清,它是快速滚动的生涩,正常滚动看起来很好。
答案 0 :(得分:0)
每次调用“getView”时,您都在创建一个列表视图项。获得性能的一个好方法是创建一个静态“viewHolder”类,它代表视图项的数据。
e.g。
static class ViewHolder
{
ImageView icon;
TextView title;
}
在“getView”方法中,您可以创建viewHolder的实例:
if (convertView == null) {
final LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(R.layout.list_header, parent, false);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
holder.name = (TextView) convertView.findViewById(R.id.title);
convertView.setTag(holder);
}
然后填写持有人的数据:
if (item != null) {
holder.title.setText("ItemTitle");
holder.icon.setImageResource(R.drawable.rocket);
}
return convertView;
对于详细示例,请参阅: