Monty
Monty

Reputation: 3215

Delete multiple image from GridView on one time button press

I am working on gridview ,here is my requirement to delete multiple selected image items from gridview on one time delete button press.

means i should be able to deleted selected images on press of delete button.

I tried lot but not getting idea about this.

I am able to delete one image at one time .

this is what i did.

//Activity

public class ImageActivity extends Activity {

    ImageAdapter iAdapter;
    ArrayList<Integer>myList;
    int position;
    GridView gView;
    boolean selected = true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image);
        dataImage();
        iAdapter = new ImageAdapter(this,myList);
        gView = (GridView)findViewById(R.id.grid_view);
        gView.setAdapter(iAdapter);
        gView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                gView.setSelection(position);
                gView.setSelected(true);
                Toast.makeText(ImageActivity.this, "" + position, Toast.LENGTH_SHORT).show();
            }

        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_image, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if(item.getItemId() == R.id.menu_delete)
        {
            if(gView.isSelected())
            {
                iAdapter.list.remove(iAdapter.getPosition());
                iAdapter.notifyDataSetChanged();
                Toast.makeText(this, "Delete" ,Toast.LENGTH_SHORT ).show();
            }
        }
        gView.setSelected(false);
        return super.onOptionsItemSelected(item);
    }

    public void dataImage()
    {
        myList = new ArrayList<Integer>();
        myList.add(R.drawable.sample_1);
        myList.add(R.drawable.sample_3);
        myList.add(R.drawable.sample_2);
        myList.add(R.drawable.sample_2);
        myList.add(R.drawable.sample_1);
        myList.add(R.drawable.sample_3);
        myList.add(R.drawable.sample_1);
        myList.add(R.drawable.sample_3);
        myList.add(R.drawable.sample_2);


    }
}

//Adapter

public class ImageAdapter extends BaseAdapter{

    Context context;
    ArrayList<Integer> list;
    int position;
    ImageView imageView;
    ImageActivity act;
    public ImageAdapter(Context context,ArrayList<Integer>list)
    {
        this.list = list;
        this.context = context;
        act = (ImageActivity)context;
        }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

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

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

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

        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(context);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(0, 5, 0, 0);


        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(list.get(position));

        return imageView;
    }

    public int getPosition()
    {
        return position;

    }
}

//

Can any one guide me or help me.

My requirement :- How to delete multiple images from gridview in one time press delete button.

Upvotes: 0

Views: 2874

Answers (2)

Chethan Shetty
Chethan Shetty

Reputation: 2070

Hi I figured out how to delete multiple images using CheckBox in a GridView

public class MainActivity extends Activity {
    private int count;
    private Bitmap[] thumbnails;
    private boolean[] thumbnailsselection;
    private String[] arrPath;
    private ImageAdapter imageAdapter;
    ArrayList<String> f = new ArrayList<String>();// list of file paths
    File[] listFile;

    Button btnDelete;

    private ProgressDialog pd;

    HashSet<String> selectedFile = new HashSet<String>();// list of file paths boolean checked

    GridView imagegrid;

    AlertDialog alertDialog = null;


    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getFromSdcard();
    imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);
    imageAdapter = new ImageAdapter();
    imagegrid.setAdapter(imageAdapter);

    imageAdapter.notifyDataSetChanged();

    btnDelete = (Button) findViewById(R.id.btnDeleteImg);

        btnDelete.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
        // to delete selected images
            Iterator iterator = selectedFile.iterator();
            while (iterator.hasNext()){
            new File(iterator.next().toString()).delete();
            }
           }
        });
    }

    public void getFromSdcard() {
        File file = new File("/mnt/sdcard/Images");

        if (file.isDirectory()) {
        listFile = file.listFiles();

        for (int i = 0; i < listFile.length; i++) {

               f.add(listFile[i].getAbsolutePath());

            }
        }
    }

    public class ImageAdapter extends BaseAdapter {
        private LayoutInflater mInflater;

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

        public int getCount() {
            return f.size();
        }

        public Object getItem(int position) {
            return position;
        }

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

        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = mInflater.inflate(R.layout.galleryitem, null);
                holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage);
                holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox);

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            Bitmap myBitmap = BitmapFactory.decodeFile(f.get(position));
            holder.imageview.setImageBitmap(myBitmap);

            final int pos = position;

            holder.checkbox.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                    // TODO Auto-generated method stub
                if(!selectedFile.contains((String)f.get(pos)))
                {
                    selectedFile.add((String)f.get(pos));
                }
                else
                {
                    selectedFile.remove((String)f.get(pos));
                }
            }
        });
        return convertView;
    }
    }

    class ViewHolder {
        ImageView imageview;
        CheckBox checkbox;
        int id;
    }
}

This approach is working for me, if you guys need more information please comment, Thanks stackoverflow

Upvotes: 1

divim
divim

Reputation: 61

You can use custom list adapter in which use Check Box and ImageView(custom view) and inflate view in getView(). On check box select put that into ArrayList and put delete button by which you can delete all the images from list and than notify adapter.

Upvotes: 0

Related Questions