我有一个ListView
用于滚动字段列表,文本和照片。 两个高度都是动态的:textview可以包含一个非常长的段落或只是一个句子,并且图像被缩放以适合宽度,因此高度是可变的(您可以看到照片)。有些项目甚至没有图像。
这使得物品的高度非常不均匀。有一个项目可以是2个屏幕长,而另一个只有一行文本。
我有它工作等..但当我向上滚动时,由于在顶部插入了回收视图,滚动位置大约跳过新孩子的大小。向下滚动工作完美......
我或多或少地理解为什么,显然回收的视图在大小上完全不同,这使得一些滚动的算法失败,无论它在哪里。
我已阅读有关覆盖itemType()
和itemTypeCount
的内容,但我不知道它是否与我的问题有关。在我做的测试中,它没有(神奇地)工作。
这可以轻松修复,任何技巧或魔法请求都可以在这里和那里进行修复吗?
有人建议编写View回收站来解决此问题:问题listview scrolls quite junky when therre are different row heights
写View recycler
会不会听起来那么复杂?
对不起抽象问题..
答案 0 :(得分:4)
只需记住ImageView和TextView的高度,然后在回收视图时,从ListAdapter中的getView方法设置这些视图的高度(您需要为此扩展BaseAdapter)。
因此,您有一个包含数据的对象列表(某些文本,可能是图像URL等)。添加一个名为imageHeight的整数字段。第一次加载列表项的图像时,将ImageView的高度保存到与该列表项关联的数据对象中的整数字段。然后,在ListAdapter中的getView中,将ImageView的高度设置为imageHeight的值。
这将使您的适配器返回具有适当高度的视图。当然,这只有在您已经知道要加载的图像/文本的高度时才有效。如果您向上滚动,则会出现这种情况,因为这些项目已经加载。
答案 1 :(得分:1)
尝试在getView中缓存图像(在WeakHashMap中),然后向上滚动不需要重新加载图像,这会导致丑陋的高度重新计算......
答案 2 :(得分:-5)
不要使用getView(int position,View convertView,ViewGroup parent)方法的convertView。
每次调用getView时都必须给行充气。它会使滚动有点慢但你的问题将得到解决。