自定义SimpleCursorAdapter重复位置

时间:2013-07-26 11:37:15

标签: android contacts simplecursoradapter

我制作了一个自定义CursorAdapter,用于在一行中显示联系人照片,姓名和ID。

我已经覆盖了getView()方法,等等一切正常。我的问题是,适配器用联系人1-8填充我的列表并重复它。 - > 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8。这是只得到1到8的位置的结果,但我不明白为什么,因为这是CursorAdapter的一部分,它在父类中并且应该可以工作。

将我的CustomAdapter更改为正常的SimpleCursorAdapter会以正确的形式显示所有联系人。

@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {

    LayoutInflater vi;

    View v;

    CheckBox box;
    v = convertView;

    if (v == null) {
        vi = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.gallery_item_layout, null);
        ImageView image = (ImageView) v.findViewById(R.id.contactImage);
        TextView tv = (TextView) v.findViewById(R.id.contactName);
        Cursor cursor = (Cursor) getItem(position);

        String id = cursor.getString(cursor
                .getColumnIndex(ContactsContract.Contacts._ID));
        tv.setText(position+" "+id+" "
                + cursor.getString(cursor
                        .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
        String photoID = cursor.getString(cursor
                .getColumnIndex(ContactsContract.Contacts.PHOTO_ID));

        if (photoID != null) {
            Uri photoUri = ContentUris.withAppendedId(
                    ContactsContract.Data.CONTENT_URI,
                    Long.parseLong(photoID));
            image.setImageURI(photoUri);

        }
        box = (CheckBox) v.findViewById(R.id.checkBox);
        box.setTag(id);
        box.setOnCheckedChangeListener(this);

    }
    return v;
}

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

您正在重复使用相同的视图,而不会在其上添加正确的信息。您可以查看适配器视图模式的本教程。您最终会得到一个高效,快速的适配器,并且数据正确。

http://www.jmanzano.es/blog/?p=166

希望有所帮助:D