Android listview回收奇怪的空白空间
我有一个与这个问题类似的问题: 上述问题已得到解决。但同样的解决方案不适用于我 我有一个由文本视图组成的列表视图。每个文本视图可以包含不同数量的图像。我使用html.imagegetter获取图像,并在列表适配器的getview方法中使用循环 如果textview中有一个或多个图像,则其高度将适合其内容。当此文本视图被回收并且新内容未填充之前定义的高度时,将出现空白 问题是我无法在getview中恢复textview高度,因为我不知道下一个列表项的高度 这是我的getview:Android listview回收奇怪的空白空间,android,listview,listadapter,recycle,Android,Listview,Listadapter,Recycle,我有一个与这个问题类似的问题: 上述问题已得到解决。但同样的解决方案不适用于我 我有一个由文本视图组成的列表视图。每个文本视图可以包含不同数量的图像。我使用html.imagegetter获取图像,并在列表适配器的getview方法中使用循环 如果textview中有一个或多个图像,则其高度将适合其内容。当此文本视图被回收并且新内容未填充之前定义的高度时,将出现空白 问题是我无法在getview中恢复textview高度,因为我不知道下一个列表项的高度 这是我的getview: public V
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = context.getLayoutInflater();
rowView = inflater.inflate(resource, parent, false);
holder = new ViewHolder();
holder.imgAvatar = (ImageView) rowView.findViewById(R.id.imgAvatar);
holder.textDetails = (TextView) rowView.findViewById(R.id.textDetails);
holder.textPostTime = (TextView) rowView.findViewById(R.id.textPostTime);
holder.textPost = (TextView) rowView.findViewById(R.id.textPost);
rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.getTag();
}
holder.textDetails.setText(details.toString());
holder.textPostTime.setText(x.postTime);
holder.textPost.setText(Html.fromHtml(x.postBody, new URLImageGetter(holder.textPost, context), null, context));
return rowView;
}
这是行布局:
<TextView
android:ellipsize="none"
android:autoLink="web"
android:textColor="#000000"
android:id="@+id/textPost"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
问题:listview回收机制无法根据其新内容计算已用视图的新高度。
如果不进行回收,则速度太慢。因此,基本上您的问题在于回收视图。当您的视图从XML中膨胀时,它们会查看图像并决定要多高。这可以很好地工作,因为充气机可以使高度为“包裹内容”,即最高的子组件的高度-这是动态的 但是,当您的getview回收旧视图时,它(出于某种原因)不会更新行的高度,您也不会更新行的高度(您以前从未这样做过,因为充气机会从“包装内容”自动处理它)。从您描述的内容可以看出,您只得到一行,其中包含之前设置的视图高度(此先前值由充气机自动设置) 您的两个解决方案是:
注意:我非常确定(几乎可以肯定),通常情况下,如果高度设置为“wrap_content”,它将换行为新的内容大小(因为它通常在内容更新时更新大小)。我说不出为什么你不会发生这种情况——可能是“包装内容”中的某些内容将其大小设置为具体值,因此没有调整大小,因此“包装内容”即使有空白也不会更改。尝试在图像和文本视图上使用requestLayout。它将帮助listview重新计算回收视图的高度。只是澄清一下:列表中的行包含(一个或多个)动态来源的图像。列表项将自动增长以适应最大(最高)的图像,但当您滚动列表并循环使用视图时,如果最大的图像比列表行短,视图将不会收缩?@matt5784 yes。事实上,你解释得更好:)行决定了如何通过编程或XML来适应图像吗?@matt5784我已经编辑了我的问题。我没有做任何特定的事情来确定行高。它是动态确定的。如果不循环使用,列表将毫无用处,因为它太慢了。我不能在同一高度制作所有图像。即使我这样做了,我也会有同样的问题,因为一行中的图像数量不是固定的。您可以发布listview行的完整xml吗?(具体地说,图像所在的部分…)没有用于图像的xml。图像以异步方式添加到textview。我在这里使用html imagegetter: