0

私のアプリケーションでは、リストビューに画像を追加し、それらの画像を文字列に変換した後にサーブレットに転送します。ただし、リストビューから削除された画像も転送されます。リストビューから削除しますが、文字列はサーブレットに転送されています。これは迷惑です。これらの行を BaseAdapter に追加する場所がわかりません。

                 Bitmap image=(Bitmap)getItem(position);
            ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
            image.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
            //encode image
            byte[] b = bytes.toByteArray();
             encodedImageString = Base64.encodeToString(b, Base64.DEFAULT);
    //encodedImageString is sent to servlet, it's showing deleted image string also

BaseAdapter の完全なコードは次のとおりです。

    public class MyAdapter extends BaseAdapter {
      ArrayList<HashMap<String, String>> imageHashMap=new ArrayList<HashMap<String,String>>();
        private LayoutInflater mInflater;

        public MyAdapter() {
            mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        }

        public int getCount() {
           // return myItems.size();
            return images.size();
        }

        public Bitmap getItem(int position) {
            return images.get(position);
            //return myItems.get(position);
        }

        public long getItemId(int position) {
           return position;
        }

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

              final Bitmap image=(Bitmap)getItem(position);


            final ViewHolder holder;
            if (convertView == null) {
                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);

            String me=  holder.image.getTag().toString();
            holder.Delete.setTag(position);

            ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
            image.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
            //encode image
            final ArrayList<HashMap<String, String>> imageHashMap=new ArrayList<HashMap<String,String>>();
            byte[] b = bytes.toByteArray();
             encodedImageString = Base64.encodeToString(b, Base64.DEFAULT);
            // StringImages.add(encodedImageString); 

            imageHashMap.putString(String.valueOf(image.getTag()), encodedImageString);



            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 (tag != (images.size() )) {
                        images.remove(tag);

                        Log.d("GCM", "Item removed from " + tag);
                        myAdapter.notifyDataSetChanged();


                }
                    if(imageHashMap.contains(tag)) { 
                        imageHashMap.remove(tag); }


                }
            });


            return convertView;
        }

    }
4

1 に答える 1