2017-02-25 108 views
0

我在ListView中有一個ImageView,ImageView有一個默認圖像,在渲染時,我異步下載圖像並將它們加載到ImageViews中。它完美地工作,但是當我向下滾動兩個項目並向後滾動時,第一行和第二行中的默認圖像變爲第六和第七行的圖像。ListView中的圖像在Android中滾動時發生變化

我閱讀了這些主題,但沒有找到解決方案。

Image change when i scroll gridview

My images changing during scroll in listview android

ListView images changing During Scroll

public class RssAdapter extends BaseAdapter { 

private final List<SyndEntry> items; 
private static Context context; 
private static Map<String, Bitmap> mBitmapCache = new HashMap<String, Bitmap>(); 

public RssAdapter(Context context, List<SyndEntry> items) { 
    this.items = items; 
    this.context = context; 
} 

@Override 
public int getCount() { 
    return items.size(); 
} 

@Override 
public Object getItem(int position) { 
    return items.get(position); 
} 

@Override 
public long getItemId(int id) { 
    return id; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = new ViewHolder(); 
    if (convertView == null) { 
     convertView = View.inflate(context, R.layout.rss_item, null); 
     holder.itemTitle = (TextView) convertView.findViewById(R.id.itemTitle); 
     holder.itemPubDate = (TextView) convertView.findViewById(R.id.itemPubDate); 
     holder.itemImg = (ImageView) convertView.findViewById(R.id.itemImg); 
     convertView.setTag(holder); 

    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    holder.itemTitle.setText(items.get(position).getTitle()); 
    holder.itemPubDate.setText(items.get(position).getPublishedDate().toString()); 

    List<SyndEnclosure> encls = items.get(position).getEnclosures(); 
    if(!encls.isEmpty()){ 
     holder.imageUrl = encls.get(0).getUrl(); 
    } 

    if (!encls.isEmpty() && holder.imageUrl != null && !holder.imageUrl.equals("null")) { 
     holder.setImage(holder.imageUrl); 
    } 

    return convertView; 
} 

private static class ViewHolder { 
    TextView itemTitle; 
    TextView itemPubDate; 
    ImageView itemImg; 
    String imageUrl; 

    public void setImage(String imageUrl) { 
     this.imageUrl = imageUrl; 
     Bitmap imageBitmap = mBitmapCache.get(imageUrl); 
     if(imageBitmap!=null){ 
      itemImg.setImageBitmap(imageBitmap); 
     } else { 
      AsyncHttpClient client = new AsyncHttpClient(); 
      client.get(imageUrl, null, fileHandler); 
     } 
    } 

    FileAsyncHttpResponseHandler fileHandler = new FileAsyncHttpResponseHandler(context) { 

     @Override 
     public void onFailure(int statusCode, Header[] headers, Throwable throwable, File file) { 

     } 

     @Override 
     public void onSuccess(int statusCode, Header[] headers, File response) { 
      Bitmap imageBitmap = BitmapFactory.decodeFile(response.getPath()); 
      itemImg.setImageBitmap(imageBitmap); 
      mBitmapCache.put(imageUrl, imageBitmap); 
     } 
    }; 
} 

我試圖建立一個布爾變量來檢查我的形象是否設置與否,也試過用SharedPreferences,但是這部分我代碼在圖像改變時沒有運行。

if(!encls.isEmpty()){ 
     holder.imageUrl = encls.get(0).getUrl(); 
    } 

    if (!encls.isEmpty() && holder.imageUrl != null && !holder.imageUrl.equals("null")) { 
     holder.setImage(holder.imageUrl); 
    } 
+0

如果您需要實現它的生產,我會強烈建議你使用一個庫(畢加索或滑翔) – lelloman

+0

請點擊此鏈接,這將作品[請參閱此鏈接( http://stackoverflow.com/questions/36563923/my-images-changing-during-scroll-in-listview-android) –

+0

@MilanPansuriya謝謝,我之前讀過,但沒有幫助。 – user1721713

回答

0

看來我最終解決了這個問題,我爲未來發布瞭解決方案。因此,在代碼

} else { 
    holder = (ViewHolder) convertView.getTag(); 
} 

這部分holder對象是不是其中有要呈現給定的行。因此,我們必須爲所需的值設置holder對象的參數。它沒問題,但如果沒有圖像,我沒有將圖像相關參數設置爲null。所以,這兩個else部分失蹤:

if(!encls.isEmpty()){ 
     holder.imageUrl = encls.get(0).getUrl(); 
    } else { 
     holder.imageUrl = null; 
    } 

    if (!encls.isEmpty() && holder.imageUrl != null && !holder.imageUrl.equals("null")) { 
     holder.setImage(holder.imageUrl); 
    } else { 
     holder.itemImg.setImageResource(R.mipmap.news_icon); 
    } 
相關問題