0

I have a big problem.I'm trying to make a ListView with dynamically loaded images, using an AsyncTask to download the image and then set it into the ListView. My problem is that, while scrolling down, the images get randomly changed.I saw answers but I can't figure.

My Codes:

(Adapter)

public class ActorAdapter extends ArrayAdapter<Actors> {

    ArrayList<Actors> actorList;
    private static LayoutInflater vi;
    int Resource;
    ViewHolder holder;


    public ActorAdapter(Context context, int resource, ArrayList<Actors> objects) {
        super(context, resource, objects);
        vi = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        Resource = resource;
        actorList = objects;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View v = convertView;

        if (v == null) {
            holder = new ViewHolder();

            v = vi.inflate(Resource, null);

            holder.imageHaberFoto = (ImageView) v.findViewById(R.id.ivImage);
            holder.tvHaberBaslik = (TextView) v.findViewById(R.id.tvHaberBaslik);
            holder.tvHaberTarihi = (TextView) v.findViewById(R.id.tvHaberTarihi);
            holder.tvKisaTanim = (TextView) v.findViewById(R.id.tvKisaTanim);
            holder.tvDetay = (TextView) v.findViewById(R.id.tvDetay);
            v.setTag(holder);

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



        new DownloadImageTask(holder.imageHaberFoto).execute(actorList.get(position).getHaberFoto());


        holder.tvHaberBaslik.setText(actorList.get(position).getHaberBaslik());
        holder.tvKisaTanim.setText(actorList.get(position).getHaberKisatanim());
        holder.tvHaberTarihi.setText(actorList.get(position).getHaberTarihi());
        holder.tvDetay.setText(actorList.get(position).getDetay());


        return v;

    }


    static class ViewHolder {
        public ImageView imageHaberFoto;
        public TextView tvHaberBaslik;
        public TextView tvHaberTarihi;
        public TextView tvKisaTanim;
        public TextView tvDetay;




    }

    private static class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {


        ImageView bmImage;


        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) {
          bmImage.setImageBitmap(result);

        }

    }

}

Actor Class :

public class Actors {

        private String HaberBaslik;
        private String HaberTarihi;
        private String HaberKisatanim;
        private String HaberlerLink;
        private String HaberFoto;
        private String Detay;
        public Actors() {

        }

        //Getters and setters
        public String getHaberBaslik() {
            return HaberBaslik;
        }
        public void setHaberBaslik(String HaberBaslik) {
            this.HaberBaslik = HaberBaslik;
        }



        public String getHaberTarihi() {
            return HaberTarihi;
        }
        public void setHaberTarihi(String HaberTarihi) {
            this.HaberTarihi = HaberTarihi;
        }

        public String getHaberKisatanim() {
            return HaberKisatanim;
        }
        public void setHaberKisatanim(String HaberKisatanim) {
            this.HaberKisatanim = HaberKisatanim;
        }


        public String getHaberlerLink() {
            return HaberlerLink;
        }
        public void setHaberlerLink(String HaberlerLink) {
            this.HaberlerLink = HaberlerLink;
        }


        public String getDetay() {
            return Detay;
        }
        public void setDetay(String Detay) {
            this.Detay = Detay;
        }




        public String getHaberFoto() {
            return HaberFoto;
        }
        public void setHaberFoto(String HaberFoto) {
            this.HaberFoto = "http://www.developers.net/images/"+HaberFoto;
        }


}

ListView:

ArrayList actorsList; ActorAdapter adapter;

new JSONAsyncTask().execute("http://www.developers.net/WebServices/GetJson.aspx?q=Haber");

    ListView listview = (ListView) findViewById(R.id.list);
    adapter = new ActorAdapter(getApplicationContext(), R.layout.row, actorsList);

    listview.setAdapter(adapter);

//JSONAsyncTask

 class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {

        ProgressDialog dialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog = new ProgressDialog(haberler.this);
            dialog.setMessage("Lütfen bekleyin.");
            dialog.setTitle("İçerik Yüklemesi");
            dialog.show();
            dialog.setCancelable(false);
        }

        @Override
        protected Boolean doInBackground(String... urls) {
            try {

                //------------------>>
                HttpGet httppost = new HttpGet(urls[0]);
                HttpClient httpclient = new DefaultHttpClient();
                HttpResponse response = httpclient.execute(httppost);

                // StatusLine stat = response.getStatusLine();
                int status = response.getStatusLine().getStatusCode();

                if (status == 200) {
                    HttpEntity entity = response.getEntity();
                    String data = EntityUtils.toString(entity);


                    JSONObject jsono = new JSONObject(data);
                    JSONArray jarray = jsono.getJSONArray("Haberler");

                    for (int i = 0; i < jarray.length(); i++) {
                        JSONObject object = jarray.getJSONObject(i);

                        Actors actor = new Actors();

                        actor.setHaberBaslik(object.getString("Baslik"));
                        actor.setHaberKisatanim(object.getString("Kisa"));
                        actor.setDetay(object.getString("Detay"));
                        actor.setHaberTarihi(object.getString("Tarih").replace("00:00:00",""));
                        actor.setHaberFoto(object.getString("Foto"));

                        actorsList.add(actor);
                    }
                    return true;
                }

                //------------------>>

            } catch (ParseException e1) {
                e1.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return false;
        }

        protected void onPostExecute(Boolean result) {
            dialog.cancel();
            adapter.notifyDataSetChanged();
            if (result == false)
                Toast.makeText(getApplicationContext(), "Veri alınamıyor.Lütfen daha sonra tekrar deneyin.", Toast.LENGTH_LONG).show();

        }
    }
Nitesh Tiwari
  • 4,742
  • 3
  • 28
  • 46
Developer007
  • 49
  • 2
  • 10
  • This is a pretty common problem, which was answered multiple times. The Images are "shuffled" because of the recycling of the views and the async image loading. You should specify your question if you got other problems. – daemmie Oct 08 '15 at 05:53
  • @Developer007 This is super common problem.Refer this http://stackoverflow.com/questions/15412767/images-are-repeating-in-listview – Nitesh Tiwari Oct 08 '15 at 05:55
  • Take a look into picasso for downloaing images http://square.github.io/picasso/ – vab Oct 08 '15 at 06:03
  • this may be helpful http://stackoverflow.com/a/14108676/1939564 – Muhammad Babar Oct 08 '15 at 06:38

0 Answers0