2017-02-25 114 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); 
    } 
相关问题