Неверный объект convertView при прокрутке списка

Моя проблема в том, что когда я прокручиваю представление списка, я получаю неверный convertView, но позиция правильная.

У меня есть 3 элемента в моем Listview, в параметре load 'position' вызывается с индексом '0', а convertView - null.

Когда я прокручиваю один за другим, к следующей позиции позиции '1' и convertView также является нулевым.

Проблема заключается в позиции 3, "позиция" - "2", но "convertView" не является нулевой, она заполняется первым элементом convertView.

Почему это?

public View getView(final int position, View convertView, ViewGroup parent) {
 View itemView = convertView;
 if (itemView == null) {
 itemView = getLayoutInflater().inflate(R.layout.post_layout, parent, false);

 postViewHolder = new PostViewHolder();
 postViewHolder.commentsImageButton = (ImageButton) itemView.findViewById(R.id.postAddCommentsImageButton);

 itemView.setTag(postViewHolder);
 }else{
 postViewHolder = (PostViewHolder) itemView.getTag();
 }

}

2 ответа

Попробуй это

public View getView(final int position, View convertView, ViewGroup parent) {
 View itemView = convertView;
 PostViewHolder postViewHolder = null;
 if (itemView == null) {
 itemView = getLayoutInflater().inflate(R.layout.post_layout, parent, false);
 postViewHolder = new PostViewHolder();
 postViewHolder.commentsImageButton = (ImageButton) itemView.findViewById(R.id.postAddCommentsImageButton);

 itemView.setTag(postViewHolder);
 }else{
 postViewHolder = (PostViewHolder) itemView.getTag();
 }
 postViewHolder.position = position;
 :do your stuff with postViewHolder
 :
 return itemView;
}


Вы получите только N нулевых элементов в вашем спискеView, это значение N изменится в зависимости от того, сколько строк будет указано на вашем экране.

Например, если на вашем экране есть 3 строки, у вас, вероятно, будет 4 или 5 строк. Это связано с тем, что Android перерабатывает старые представления в новые.

Если вам нужно отслеживать позицию держателя, переместите свой postViewHolder.position из postViewHolder.position if/else.

Надеюсь, поможет.

licensed under cc by-sa 3.0 with attribution.