我目前在一个问题中丢失,当ListView滚动到顶部时,我有一个显示ImageViews的列表我将向列表中添加更多数据并使ListView仍然显示当前图像而不是列表中的第一个图像。所以我在数据更改和调用notifyDatasetHasChanged()之后使用setSelection方法。但是当我在上面调用之后再滚动List一次时,我在适配器的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()方法引起的。
提前致谢。
答案 0 :(得分:0)
使用Holder Class Object在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;
}
答案 1 :(得分:0)
它已经解决。我在加载图像数据之前设置了ImageView的大小,并且我设置的高度非常大,大到屏幕高度的五倍。所以ListView只创建当适配器设置为它时,一个单元格。这导致错误的位置问题。