首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ListView 圖片加載錯位閃爍問題:複用機制導致的異步圖片顯示異常

     編輯:程式設計綜合問答

現象

使用 PullToRefreshListView,首次進入 Activity 時 Item 中的 ImageView 圖片錯位;下拉刷新後卻正常顯示。

根本原因

ListView 的 View 複用機制 (convertView) + 異步圖片加載競態條件。

  • 首次加載時,異步任務啟動,但 ListView 快速滑動/佈局導致 convertView 被複用,綁定了新的數據/位置。
  • 舊異步任務完成後,將圖片設置給已被複用的 View,導致圖片錯位。
  • 下拉刷新時通常重新創建列表或重置適配器,避免了複用衝突,故顯示正常。

解決方案

  1. 標記法:在啟動異步任務前,給 ImageView 設置 Tag (如 URL),任務完成前驗證 Tag 是否仍匹配,不匹配則丟棄結果。
  2. 使用成熟圖片加載庫:Glide、Picasso、Coil 內部已處理複用、取消、佔位圖等邏輯,強烈推薦。
  3. 在 getView 中重置圖片:異步開始前先設置佔位圖或清空,減少閃爍。

代碼示例 (標記法)

String url = item.getImageUrl();
imageView.setTag(url);
imageLoader.load(url, new Callback() {
    @Override public void onLoaded(Bitmap bmp) {
        if (url.equals(imageView.getTag())) {
            imageView.setImageBitmap(bmp);
        }
    }
});
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved