图像不能持久化DataViewAdapter

时间:2015-01-17 17:07:21

标签: java android image bitmap adapter

我有一个我正在显示的图像列表。我成功获取图像并将图像设置为ImageView。

但问题是每当我滚动图像列表时,图像视图往往会加载某些其他图像视图的图像。即随机改变图像视图的图像。

我希望一旦加载了图像,就会将其保存到各自的图像视图中。

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

    dish = dishes.get(position);

    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View rowView = inflater.inflate(R.layout.dish_summary, parent,
            false);
    image = (ImageView) rowView.findViewById(R.id.dish_image);
    Log.i("image",String.valueOf(image.getTag()));
    if (image.getTag() == null){
    new LoadImage().execute(dish.getImage());   
    }       
    notifyDataSetChanged(); 
    return rowView;
}


private class LoadImage extends AsyncTask<String, String, Bitmap> {
    @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(context);
            pDialog.setMessage("Loading Menu ....");
            pDialog.show();
    }
       protected Bitmap doInBackground(String... args) {
         try {
              bitmap = BitmapFactory.decodeStream((InputStream)new URL(args[0]).getContent());
        } catch (Exception e) {
              e.printStackTrace();
        }
      return bitmap;
       }
       protected void onPostExecute(Bitmap img) {

         if(img != null)
         {
          image.setImageBitmap(img);
          image.setTag(img);
          pDialog.dismiss();
         }else
         {
           pDialog.dismiss();
           Toast.makeText(context, "Image Does Not exist or Network Error", Toast.LENGTH_SHORT).show();
         }
       }
}

1 个答案:

答案 0 :(得分:0)

由于GetView()方法被调用以在List看不见时回收/重新绘制List。图像试图重绘自己。

解决我使用的问题和外部库SmartImageView,它允许从URL加载图像,图像缓存到内存和磁盘,以便超快速加载。

希望这会有所帮助!!