Android Asyn이 ListVIew에서 ImageView를로드하고 이미지가 자동으로 변경되고 올바르지 않습니다.

리 케빈

짧은 제목 (ImageView + TexiView)으로 사진 갤러리를 표시하는 ListView가 있습니다. AsyncTask를 사용하여 다운로드 작업을 수행했습니다. 그러나 문제는 때때로 잘못된 이미지가 표시되고 갑자기 변경된다는 것입니다 (여러 번 발생할 수 있음). 예 : IA BC는 ListView에 표시되고 ABC의 경우 이미지 m1 m2 m3이 각각 표시됩니다. 응용 프로그램을 실행하면 A의 imageView에 m1, m2 또는 m3이 표시되고 자주 변경 될 수 있습니다. 내 코드는 다음과 같습니다.

다운 클래스 :

  public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage = null;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }
    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }
    protected void onPostExecute(Bitmap result) {
        if(result == null){
            bmImage.setImageResource(R.drawable.loading);
          }else{
            bmImage.setImageBitmap(result);
            }
    }
}

ListView 용 어댑터 :

    public View getView(int position, View convertView, ViewGroup parent){
    item item1 = getItem(position);
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.item1, parent, false);
    }
    ImageView iv = (ImageView) convertView.findViewById(R.id.img);
    TextView ttv = (TextView) convertView.findViewById(R.id.p_title);
    TextView itv = (TextView) convertView.findViewById(R.id.p_price);
    /**
    *Download Image
    */
    String img_url;
    img_url = item1.getImg_url();
    new DownloadImageTask((ImageView) convertView.findViewById(R.id.img))
            .execute(img_url);

    ttv.setText(item1.getTitle());
    itv.setText("$"+item1.getPrice());
    return convertView;
}

활동:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.show_promotion2);

    gridView = (GridView) findViewById(R.id.gridview);
    getPromotionByRequest(previousPage, data);//Get Data for items

    itemAdapter = new promotionAdapter(this, items);
    //progress..........
    gridView.setAdapter(itemAdapter);
    setupListViewListener();
}
리 케빈

답변 해 주셔서 감사합니다. 안타깝게도 여전히 문제가 발생합니다. 마지막으로 각 어댑터에서 "Picasso"사용하여 문제를 해결했습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관