Reputation: 3215
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
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
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