Android Laggy AlphabetIndexer в ListView
У меня есть CustomCursorAdapter, чтобы сделать хорошие заголовки разделов. Я удалил все изображения из строк ListView, но прокрутка все еще довольно запаздывает. Кто-нибудь знает способ оптимизировать это? Прокрутка в таких приложениях, как Viber для контактов, действительно плавная даже для 2000 контактов. Спасибо!
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;
}
}
Для дальнейшего уточнения, это быстрая прокрутка, которая прерывистая, нормальная прокрутка кажется хорошей.
1 ответ
Вы создаете элемент представления списка каждый раз, когда вызывается getView. Хороший способ повысить производительность - создать статический класс viewHolder, представляющий данные элемента представления.
например
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;
подробный пример смотрите также: