關於ListView數據錯亂跟item上圖片錯位

ListView的優化有用的ViewHolder來做緩存,ViewHolder會把圖像一起緩存掉,當再次調用getView的時候會直接拿出來用,如果沒有對View上的數據進行設置,就會顯示前面設置過值的界面,所以getView裏面需要進行resetViewHolder操作,就行界面上的數據都進行初始化,之後數據就不會錯亂了。

對於圖片錯位,如果沒有進行緩存的話上面的問題跟這個問題都不會出現,如果進行了異步加載的話,圖片錯位就是常見現象了。最簡單的解決方法就是網上說的,給 ImageView 設置一個 tag, 並預設一個圖片。再開始加載圖片,異步加載完圖片後進行tag檢查,如果還是當前設置的tag則進行相應的顯示。如果不是,則不顯示。下面給出關鍵代碼:

<span style="white-space:pre">	</span>// 給 ImageView 設置一個 tag
        holder.img.setTag(imgUrl);
        // 預設一個圖片
        holder.img.setImageResource(R.drawable.ic_launcher);
        if (imgUrl != null && !imgUrl.equals("")) {
            Bitmap bitmap = imageLoader.loadImage(holder.img, imgUrl,
                    new ImageDownloadedCallBack() {

                        @Override
                        public void onImageDownloaded(ImageView imageView,
                                Bitmap bitmap) {
                            // 通過 tag 來防止圖片錯位
                            if (imageView.getTag() != null
                                    && imageView.getTag().equals(imgUrl)) {
                                imageView.setImageBitmap(bitmap);
                            }
                        }
                    });
            if (bitmap != null) {
                holder.img.setImageBitmap(bitmap);
            }
        }
這樣就解決了問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章