1

我正在关注 developer.android.com 上的文章 “使 ListView 滚动平滑”

代码片段是:

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”来判断项目是否存在。两种方式是否同样有效?

4

1 回答 1

1

当适配器回收视图时,位置会发生变化。这由框架自动发生,直到您检查值后您才会知道它发生了。上次将视图传递给 getView() 时设置的自定义 ViewHolder 对象仍然存在,因此它是一个方便的地方来跟踪工作开始时的位置。如果它们不匹配,则视图已被回收,因此您不应设置位图,因为它是错误的。

于 2013-09-30T21:41:56.093 回答