2013-07-26 3 views
0

Я создал пользовательский CursorAdapter для отображения фотографии контакта, имени и идентификатора в одной строке.Пользовательские повторяющиеся позиции SimpleCursorAdapter

Я перезаписал метод 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; 
} 

Что не так с моим кодом?

ответ

0

Вы используете одно и то же представление, не помещая правильную информацию о них. Вы можете взглянуть на это руководство по шаблону-адаптеру адаптера. У вас будет эффективный и быстрый адаптер с правильными данными.

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

Надежда, что помогает: D

+0

Я думаю, что картина viewholder не имеет ничего общего с моей проблемой, что рассчитывать положение только достигает от 1 до 8, даже если у меня есть hundrets контактов от курсора указывает на –

+0

, но вы используете одно и то же представление, если оно не равно нулю. Бьюсь об заклад, при запуске приложения вы видите только 8 контактов. Когда адаптер вызывается снова при прокрутке, convertview - это старая строка, которая исчезла сверху, и вы только проверяете, не является ли она нулевым, а затем возвратите ее. Поверьте мне и попытайтесь реализовать шаблон держателя вида :) –

+0

Я никогда не использовал его до того, как у вас не возникнут какие-либо проблемы, но я все равно его реализую: D –

Смежные вопросы