2017-02-25 1 views
0

ListView에 ImageView가 있고 ImageView에 기본 이미지가 있고 렌더링하는 동안 이미지를 비동기 적으로 다운로드하여 ImageViews에로드합니다. 그것은 완벽하게 작동하지만 두 항목을 아래로 스크롤하고 뒤로 스크롤하면 첫 번째와 두 번째 행의 기본 이미지가 여섯 번째 행과 일곱 번째 행의 이미지로 변경됩니다.안드로이드에서 스크롤하는 동안 ListView에서 이미지가 바뀌고 있습니다.

이 항목을 읽었지만 해결책을 찾지 못했습니다.

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); 
     } 
    }; 
} 

Image change when i scroll gridview

My images changing during scroll in listview android

나는 내 이미지 설정하거나하지되었는지 여부를 확인하는 부울 변수를 설정하는 시도도 된 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로 설정하지 않았습니다. 따라서, 두 개의 다른 부분이 누락되었습니다 :

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); 
    } 
관련 문제