我正在关注来自 developer.android.com 的文章 "Making ListView Scrolling Smooth"
代码 fragment 是:
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”可以判断item是否没有被回收。
我尝试了这个想法:设置一个类变量position等于getView中的position。但它不起作用。
而且我还找到了一个类似的代码来执行异步任务 “Multithreading For Performance”, 它使用“WeakReference”来判断项目是否存在。 这两种方式是否同样有效?
最佳答案
当 Adapter 回收 View 时,位置会发生变化。这由框架自动发生,在检查值之前您不会知道它发生了。上次将 View 传递给 getView() 时设置的自定义 ViewHolder 对象仍将存在,因此这是一个方便的地方来跟踪工作开始时的位置。如果它们不匹配,则 View 已被回收,因此您不应设置位图,因为它是错误的。
关于android - 使用AsyncTask如何判断listview中item是否被回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19104037/