我正在关注developer.android.com上的文章 "Making ListView Scrolling Smooth"
代码的片段是:
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (v.position == position) {
// If this item hasn't been recycled already, hide the
// progress and set and show the image
v.progress.setVisibility(View.GONE);
v.icon.setVisibility(View.VISIBLE);
v.icon.setImageBitmap(result);
}
}
我不明白变量“位置”是什么。为什么“v.position == position”可以判断该项目是否未被回收。
我尝试了这个想法:设置一个类变量位置等于getView中的位置。但它不起作用。
我还找到了一个类似的代码来执行异步任务 “Multithreading For Performance”, 它使用“WeakReference”来判断项目是否存在。 这两种方式同样有效吗?
答案 0 :(得分:1)
当适配器回收视图时,位置会发生变化。这是由框架自动发生的,直到您检查了值之后才会知道它发生了。上次将视图传递给getView()时设置的自定义ViewHolder对象仍然存在,因此它是一个方便的位置,可以跟踪工作开始时的位置。如果它们不匹配,View已被回收,因此您不应该设置位图,因为它是错误的。