在Android中防止来自ListView的重复图像字符串

时间:2013-10-13 09:55:36

标签: android string list listview

在我的代码中,我想从相机中获取图像并将其字符串存储在encodedimagestring变量中。但是我的代码存储了两次相同的图像字符串。我应该在这里设置什么逻辑检查以防止重复的字符串。请帮我。

public View getView(final int position, View convertView, ViewGroup parent) {
  final Bitmap image=(Bitmap)(images.get(position));
  final ViewHolder holder;
  if (convertView == null) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    image.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    byte[] b = bytes.toByteArray();
    encodedImageString = Base64.encodeToString(b, Base64.DEFAULT);
    StringImages.add(encodedImageString); 
    holder = new ViewHolder();
    convertView = mInflater.inflate(R.layout.imageview2, null);
    holder.image = (ImageView) convertView.findViewById(R.id.imageView2);
    holder.Delete=(Button)convertView.findViewById(R.id.buttonClose);
    convertView.setTag(holder);
  } else {
    holder = (ViewHolder) convertView.getTag();
  }
  BitmapFactory.Options factoryOptions = new BitmapFactory.Options();
  int imageWidth = factoryOptions.inDensity=70;
  int imageHeight = factoryOptions.inDensity=65;
  Bitmap Scaled =Bitmap.createScaledBitmap(images.get(position), imageWidth,
                                           imageHeight, true);
  holder.image.setImageBitmap(Scaled);
  holder.image.setTag(position);
  holder.Delete.setTag(position);
  holder.image.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
      // TODO Auto-generated method stub
      final Dialog imgDialog = new Dialog(view.getContext(),
                       android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

      imgDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      imgDialog.setCancelable(false);
      // layout imageview2 is used because when i use simple imageview layout
      //   dialogue with imageview and closebutton,  
      //   every taken image at instance will not be shown in dialogue.
      imgDialog.setContentView(R.layout.imageview);
      Button btnClose = (Button)imgDialog.findViewById(R.id.btnIvClose);
      ImageView ivPreview = (ImageView)imgDialog.findViewById(R.id.image1);
      ivPreview.setImageBitmap(images.get(position));
      btnClose.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
          imgDialog.dismiss();
        }
      });
      imgDialog.show();
      myAdapter.notifyDataSetChanged();
      listviewattachment.setSelection(myAdapter.getCount()+1 );
      }
    });
    holder.Delete.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View view) {
        // TODO Auto-generated method stub
        int tag = (Integer) view.getTag();
        if ((position) != (images.size() )) {
          images.remove(images.get(tag));
          images.remove(image);
          StringImages.remove(position);
          myAdapter.notifyDataSetChanged();
        }
      }
    });
    return convertView  ;
  }
}

1 个答案:

答案 0 :(得分:2)

if (!StringImages.contains(encodedImageString)) {
    StringImages.add(encodedImageString); 
}

应该做的伎俩。