我在listview中重用视图。我总是在 getView 中再次设置所有控件的可见性,内容,等等。不幸的是,似乎ListView无法重新计算高度。
图一显示初始项目显示:
图2显示了在我们滚动并返回之后如何呈现第一项
背景色情布局高度(黑色区域)让我认为在图片二中,Android正在重用一个只显示更高项目的视图(例如第二项)。但是,为什么当重新使用内容(文本+图像)不高的第一个项目的视图时,它为什么不重新校准/重置/重新计算自身(在XML中处于“wrap_content”模式)?
事实上,我不确定发生了什么。如果我在视图中有图像,问题只会出现。我已经尝试以不同的方式组织位图/图像加载(下面的示例代码)注释掉了不同的东西,但这似乎并没有太大的区别。我在这里真的很茫然。
override_listitem_news.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dip"
android:background="@android:color/black"
>
<TextView
android:id="@+id/listitem_news_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="22sp"
android:padding="5dip"
android:text="@string/newsItemTitle"/>
<TextView
android:id="@+id/listitem_news_date"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="italic"
android:textSize="15sp"
android:padding="5dip"
android:text="@string/newsItemDate"/>
<TextView
android:id="@+id/listitem_news_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="normal"
android:textSize="15sp"
android:padding="5dip"
android:autoLink="web"
android:text="@string/newsItemDesc"
android:background="@android:color/darker_gray"
/>
<ImageView
android:id="@+id/listitem_news_icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
以下是我在 getView
中加载图片的代码 ViewTreeObserver vto = image.getViewTreeObserver();
vto.addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
image.getViewTreeObserver().removeGlobalOnLayoutListener(this);
image.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
SharedCode.sharedUtilScaleImage_Width(image);
}
}
);
image.setTag(data.image_file_name + data.image_file_url);
Bitmap bit = null;
bit = SharedCode.sharedGetFileFromOffline(thisActivityContext, "news", data.image_file_name, MyGetKindOfFile.ImageAsBitmap).bitmap;
if (bit != null) {
image.setImageBitmap(bit);
image.setVisibility(View.VISIBLE);
}
else {
image.setImageBitmap(null);
image.setVisibility(View.GONE);
}
image.setPadding(0, 0, 0, 0);
image.setBackgroundColor(data.backgroundColorInt);
答案 0 :(得分:0)
对于它的价值,问题似乎与imageview有关。仅供参考,我将在此处写下我是如何解决它的。
我的研究也表明其他人在列表视图中使用wrap_content时出现与我类似的问题,但我找不到任何遇到与我完全相同问题的人。