ListView中的Android Laggy AlphabetIndexer

时间:2011-09-06 06:23:32

标签: android

我有一个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;
    }

}

为了进一步澄清,它是快速滚动的生涩,正常滚动看起来很好。

1 个答案:

答案 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;

对于详细示例,请参阅:

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