如何解决如何使用ASyncTask更新自定义ListView中的ImageView?
| 我知道已经有成千上万的类似问题,但是我检查了20多个答案,但没有一个能解决我的问题。 首先,我有一个扩展SimpleCursorAdapter
的适配器。我在其中使用自定义视图,包括ImageView
。布局为:
<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
android:orientation=\"horizontal\" android:layout_width=\"fill_parent\"
android:layout_height=\"@dimen/listitem_height\" android:gravity=\"center_vertical\">
<ImageView android:id=\"@+id/row_image\" android:layout_width=\"@dimen/listitem_height\"
android:layout_height=\"fill_parent\" android:paddingRight=\"@dimen/spaceLarge\"
android:layout_centerVertical=\"true\" android:layout_marginLeft=\"@dimen/spaceMedium\"
android:src=\"@drawable/unkNown_album\" />
<LinearLayout android:layout_width=\"fill_parent\"
android:layout_height=\"fill_parent\" android:orientation=\"vertical\"
android:gravity=\"center_vertical|left\">
<TextView android:id=\"@+id/row_text\" android:layout_width=\"fill_parent\"
android:textAppearance=\"?android:attr/textAppearanceMedium\"
android:gravity=\"center_vertical|left\" android:layout_height=\"wrap_content\" />
<TextView android:id=\"@+id/title\" android:layout_width=\"fill_parent\"
android:textAppearance=\"?android:attr/textAppearanceSmall\"
android:gravity=\"center_vertical|left\" android:layout_height=\"wrap_content\"
android:textColor=\"#95D0B4\" />
</LinearLayout>
然后,ѭ1需要一些时间来加载图像,所以如果我在主线程中进行加载,滚动将变得很糟糕。因此,我想使用“ 4”来加载图像,但是现在我遇到了“ 5”的问题,该问题在滚动时会重用视图。
也就是说,以下代码不起作用:
class imagesetter extends AsyncTask<String,Void,Bitmap> {
private ImageView iv;
imagesetter(ImageView iv) {
this.iv = iv;
}
@Override
protected Bitmap doInBackground(String... params) {
String path = (String) params[0];
try {
return BitmapFactory.decodeFile(path);
} catch (OutOfMemoryError e) {
Log.w(Utils.TAG,\"\",e);
return null;
}
}
@Override
protected void onPostExecute(Bitmap result) {
iv.setimageBitmap(result);
super.onPostExecute(result);
}
}
我在适配器的bindView()
中称execute()
。滚动时ѭ1改变,结果位图被设置到错误的位置。
有人解决这个问题吗?非常感谢你!
附言快速滚动列表时,我也会遇到严重的“ 10”问题。我完全不知道如何避免位图内存泄漏问题,因为只要它们在列表中,我就无法回收它们。
解决方法
适配器重用ListView内的视图。结果你永远不确定
private ImageView iv;
包含您要设置的ImageView对象。您应使用ID在列表中查找适当的单元格。
重新考虑使用缩略图或减小图像尺寸。你可以在这里阅读更多:
延迟加载ListView中的图像
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。