Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListView回收问题_Android_Listview_Android Asynctask_Imageview - Fatal编程技术网

Android ListView回收问题

Android ListView回收问题,android,listview,android-asynctask,imageview,Android,Listview,Android Asynctask,Imageview,我有一个带有自定义适配器的listview,每行中都有一个imageview,我通过URL将图像下载到远程服务器,并将其传递给AsyncTask。我的代码正在工作,但当我滚动listview时,ImageView的下载图像会再次下载 我想下载第一次创建listview的图像。我研究了很多话题,但什么都不懂。我该怎么办 我的自定义适配器在下面 public ListAdapter(Context context, ProgramInfo values) { this.contex

我有一个带有自定义适配器的listview,每行中都有一个imageview,我通过URL将图像下载到远程服务器,并将其传递给AsyncTask。我的代码正在工作,但当我滚动listview时,ImageView的下载图像会再次下载

我想下载第一次创建listview的图像。我研究了很多话题,但什么都不懂。我该怎么办

我的自定义适配器在下面

public ListAdapter(Context context, ProgramInfo values) {

        this.context = context;
        this.values = values;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      }

       @Override
       public int getCount(){

           return values.getSize();
            }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

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

            View rowView = mInflater.inflate(R.layout.list_row, null);
            TextView programName = (TextView)rowView.findViewById(R.id.programName);
            TextView programTime = (TextView)rowView.findViewById(R.id.programTime);
            TextView programState = (TextView)rowView.findViewById(R.id.programState);
            ImageView programImage = (ImageView)rowView.findViewById(R.id.programImage);


            programName.setText(values.programNames.get(position));
            programTime.setText(values.programTimes.get(position));


            new DownloadImage(programImage).execute(values.programImageUrls.get(position)); // download images


        return rowView;

    }
而我的任务

private class DownloadImage extends AsyncTask<String, Void, Bitmap> {
     ImageView bmImage;

     public DownloadImage(ImageView bmImage) {
         this.bmImage = bmImage;
     }

     protected Bitmap doInBackground(String... urls) {
         String urldisplay = urls[0];
         Bitmap mIcon11 = null;
         try {
             HttpURLConnection urlConnection = (HttpURLConnection)new URL(urldisplay).openConnection();
             urlConnection.setDoInput(true);
             InputStream in = urlConnection.getInputStream();
             mIcon11 = BitmapFactory.decodeStream(in);
             urlConnection.disconnect();
         } catch (Exception e) {
             Log.e("Error", e.getMessage());
             e.printStackTrace();
         }
         return mIcon11;
     }

     protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
        } 
     }
私有类下载映像扩展异步任务{
图像视图bmImage;
公共下载图像(ImageView bmImage){
this.bmImage=bmImage;
}
受保护位图doInBackground(字符串…URL){
字符串urldisplay=url[0];
位图mIcon11=null;
试一试{
HttpURLConnection urlConnection=(HttpURLConnection)新URL(urldisplay).openConnection();
urlConnection.setDoInput(true);
InputStream in=urlConnection.getInputStream();
mIcon11=BitmapFactory.decodeStream(in);
urlConnection.disconnect();
}捕获(例外e){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
返回mIcon11;
}
受保护的void onPostExecute(位图结果){
bmImage.setImageBitmap(结果);
} 
}

谢谢…

在adapters中,每出现一行,就会执行side getView中的每一项操作 所以必须在GetViewHolder中使用ViewHolder来保存每行元素的状态 在重新下载之前,我们使用if语句检查ImageView是否为null。。。。 这是我所说的令人惊讶的例子


在ListView中为imageview使用通用图像加载器库查看视图支架模式,以优化回收。您还可以使用位图缓存。。。