Android ListViewAdapter return 添加更多数据并调用 setSelection() 方法后位置错误

Android ListViewAdapter return wrong position after adding more data and invoking setSelection() method

我目前迷失了一个问题,我有一个列表,当 ListView 滚动到顶部时显示 ImageViews 我将向列表添加更多数据并使 ListView 仍然显示当前图像而不是第一个图像列表。所以我在数据更改和调用 notifyDatasetHasChanged() 之后使用 setSelection 方法。但是当我在上述调用之后再次滚动列表时,我在适配器的 getView() 方法中得到了错误的位置。

代码如下:

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()方法引起的。

提前致谢。

使用 Holder Class 对象在您的 getView() 方法中设置 setTag 和 getTag 方法,例如:

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;
    }

已经solved.I在图片数据加载前设置了ImageView的大小,我设置的高度很大,大到屏幕的五倍height.SoListView只创建一个cell当adapter设置为it.This导致位置错误的问题。