android - 使用AsyncTask如何判断listview中item是否被回收?

标签 android android-listview android-asynctask

我正在关注来自 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/

相关文章:

android - 过滤 ListView 并获得正确的 onclick 项目

android - 如何从数据库中的两个表填充自定义 ListView?

android - 如何从我的 doInBackground 任务中获取返回值?

java - 如果互联网连接丢失,则停止应用程序中的计时器运行

java - Json 和 android 错误

android - 没有离线可用的 android 3.6.1 的缓存版本

android - 在 Android 中创建 UI 表的最佳方式

Android ProGuard 混淆库 : keep class not working

android - 将相机捕获的图像存储在 SQLite 数据库中

android - 具有更多 ListView 的 AdapterView.OnItemClickListener