ListView和variables高度的项目会导致滚动问题

我有一个ListView ,用于滚动字段,文本和照片列表。 两个高度都是dynamic的 :textview可以包含一个很长的段落或只是一个句子,并且图像被缩放以适合宽度,所以高度是可变的(您可以看到照片)。 有些项目甚至没有图像。 在这里输入图像说明 这使得物品在高度上非常不均匀。 有一个项目可以是2个屏幕长,而另一个只是一个文本行。

我有它的工作等..但是当我向上滚动,作为回收的意见插入在顶部,滚动位置跳转大约新的孩子的大小。 向下滚动的作品完美…

我或多或less地理解了为什么,显然这些再循环的意见在大小上是完全不同的,这使得一些滚动的algorithm无论在哪里都会失败。

我已经阅读了重写的itemType()itemTypeCount ,但我不知道是否与我的问题有关。 在testing中,我没有(神奇地)工作。

这可以很容易地解决,任何技巧或魔术requestLayout在这里和那里?

有一个人build议写一个查看回收站来解决这个问题: listviewview滚动相当垃圾,当therre是不同的行高

编写一个View recycler会像听起来那么复杂?

对不起,抽象的问题..

Solutions Collecting From Web of "ListView和variables高度的项目会导致滚动问题"

只要记住ImageView和TextView的高度,然后当您的视图被回收时,请在L​​istAdapter的getView方法中为这些视图设置高度(为此需要扩展BaseAdapter)。

所以你有一个与您的数据对象列表(一些文字,也许图像的url等)。 添加一个名为imageHeight的整数字段。 第一次加载列表项目的图像时,将ImageView的高度保存到与该列表项目关联的数据对象中的整数字段。 然后,在您的ListAdapter的getView中,将ImageView的高度设置为imageHeight的值。

这将使您的适配器返回具有适当高度的视图。 当然,这只有在您已经知道您要加载的图像/文本的高度时才有效。 这是真的,如果你滚动,因为这些项目已经被加载。

尝试caching图像(在WeakHashMap)在getView,然后向上滚动将不需要重新加载图像,这将导致难看的高度重新计算…

不要使用getView(int position,View convertView,ViewGroup parent)方法的convertView。

每次调用getView时都必须充气该行。 这将使滚动有点慢,但你的问题将得到解决。