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;

подробный пример смотрите также:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html

Другие вопросы по тегам