2016-10-14 1 views
0

В настоящее время я потерял в проблеме, что у меня есть список, который отображает ImageViews, когда ListView прокручивает вверх. Я добавлю больше данных в список и сделаю ListView все еще показывает текущее изображение вместо первого изображения из списка. Поэтому я использую метод setSelection после изменения данных и вызова notifyDatasetHasChanged(). Но когда я прокручиваю список еще раз после вызова выше, я получаю неправильную позицию в методе getView() из адаптера.Android ListViewAdapter возвращает неправильную позицию после добавления дополнительных данных и вызова метода setSelection()

Вот код:

for (int i = tempPics.size() - 1; i >= 0; i--) { 
    DBChapterPicture pic = (DBChapterPicture) tempPics.get(i); 
    chapterPics.add(0, pic); 
} 

detailAdapter.notifyDataSetChanged(); 
detailListView.setSelection(chapterPics.size() - headState - 1); 

И после этого куска, выполненного в GetView() мой адаптер я получил неправильную позицию:

@Override 
public View getView(final int position, View convertView, ViewGroup parent) 
{} 

Я не знаю, почему. Я думаю, это может быть вызвано методом setSelection().

Заранее спасибо.

+0

Q1: Почему каждый цикл 'chapterPics.add' добавляет ваш объект' pic' к индексу 0? Q2: Какова ценность 'headState'? –

+0

A1: Я хочу, чтобы недавно добавленные фотографии были в верхней части списка. A2: headState - значение смещения. – AirTayork

ответ

0

Это было solved.I установить размер в ImageView перед загрузила данные изображения, а высота я установил это очень большой, в пять раз больше высоты экрана. Таким образом, ListView создает только одну ячейку, когда адаптер установлен на нее. Это вызвало неправильную проблему с положением.

0

указан метод метод SetTag и GetTag в вашем GetView() с помощью держателя Класс объекта, как:

if (convertView == null) { 
      holder = new Holder(); 
      convertView = inflater.inflate(R.layout.your_row_layout, null); 
      holder.img = (ImageView) convertView.findViewById(R.id.imgId); 

      convertView.setTag(holder); 
     } else { 
      holder = (Holder) convertView.getTag(); 
     } 



class Holder { 
     public ImageView img; 
    } 
+0

Это прохождение позиции в методе getView() пошло не так, я думаю, что это не имеет никакого отношения к держателю. – AirTayork

+0

Попробуйте с интерфейсом @AirTayork –

+0

Что вы подразумеваете под интерфейсом? – AirTayork

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

  • Нет связанных вопросов^_^