Universal Image Loader (UIL) 提供 ImageLoadingListener 介面,四個回調方法覆蓋完整生命週期:
onLoadingStarted:開始載入,可顯示進度條或佔位圖。onLoadingFailed:載入失敗,可重試或顯示錯誤圖。onLoadingComplete:載入成功並完成 Bitmap 繪製,此處可隱藏進度條、顯示版面、啟動動畫等。onLoadingCancelled:任務取消(如快速滑動列表)。ImageLoader.getInstance().displayImage(
imageUri,
imageView,
displayOptions, // 可選:DisplayImageOptions 設定佔位圖、圓角、快取策略
new ImageLoadingListener() {
@Override public void onLoadingStarted(String uri, View view) {
progressBar.setVisibility(View.VISIBLE);
}
@Override public void onLoadingFailed(String uri, View view, FailReason reason) {
progressBar.setVisibility(View.GONE);
imageView.setImageResource(R.drawable.ic_error);
}
@Override public void onLoadingComplete(String uri, View view, Bitmap bitmap) {
progressBar.setVisibility(View.GONE);
// 這裡可安全操作 bitmap 或通知版面顯示
containerLayout.setVisibility(View.VISIBLE);
}
@Override public void onLoadingCancelled(String uri, View view) {
progressBar.setVisibility(View.GONE);
}
},
new ImageLoadingProgressListener() { // 可選:進度回調
@Override public void onProgressUpdate(String uri, View view, int current, int total) {
progressBar.setProgress((int)(100f * current / total));
}
}
);
SimpleImageLoadingListener 適配器,僅覆寫需要的方法。onLoadingComplete 中呼叫 adapter.notifyDataSetChanged() 會導致閃爍,建議僅更新單一 ViewHolder。onLoadingStarted 不會觸發,直接進入 onLoadingComplete,邏輯需兼容此情況。UIL 官方已停止維護(最後更新 2017),新專案建議改用 Glide、Picasso 或 Coil (Kotlin 協程優先),它們同樣提供 Target / RequestListener 等同等回調機制,且支援現代 Android 架構(Lifecycle、RequestManager 等)。
使用 ImageLoadingListener 即可精確掌控 ImageLoader 異步載入的每個階段,滿足「載入完成再顯示版面」等業務需求;長期維護專案請考慮遷移至活躍維護的圖片庫。