Я создал пользовательский 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;
}
Что не так с моим кодом?
Я думаю, что картина viewholder не имеет ничего общего с моей проблемой, что рассчитывать положение только достигает от 1 до 8, даже если у меня есть hundrets контактов от курсора указывает на –
, но вы используете одно и то же представление, если оно не равно нулю. Бьюсь об заклад, при запуске приложения вы видите только 8 контактов. Когда адаптер вызывается снова при прокрутке, convertview - это старая строка, которая исчезла сверху, и вы только проверяете, не является ли она нулевым, а затем возвратите ее. Поверьте мне и попытайтесь реализовать шаблон держателя вида :) –
Я никогда не использовал его до того, как у вас не возникнут какие-либо проблемы, но я все равно его реализую: D –