Android列表视图滚动图像错误(随机播放)

时间:2015-10-08 05:41:49

标签: android listview android-listview

我有一个很大的问题。我试图用动态加载的图像创建一个ListView,使用AsyncTask下载图像,然后将其设置为ListView。我的问题是,在向下滚动时,图像会随机变化。我看到了答案,但我无法想象。

我的代码:

(适配器)

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

        }

    }

}

演员班:

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适配器;

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

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

        }
    }

0 个答案:

没有答案