I have listview with row layout containing some textviews and one imageview (delete icon). This imagview has xml attribute: android:onClick="deleteItem"
Now how can I get position of that list row where the delete icon was pressed and delete that row from listview?

- 5,753
- 72
- 57
- 129

- 177
- 2
- 17
3 Answers
You could do it much simpler by using a listener:
final ListView listView = findViewById(R.id.listView); // your listview's id here
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
listView.removeViewAt(position);
}
});
EDIT:
Considering your recent comment, this is one way of how you can accomplish that:
ListView mListView;
public class MyAdapter extends ArrayAdapter<String> {
Context context;
int layoutRes;
LayoutInflater inflater;
public MyAdapter(Context context, int resource) {
super(context, resource);
this.context = context;
this.layoutRes = resource;
this.inflater = LayoutInflater.from(context);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(layoutRes, parent, false);
}
ImageView imageView = convertView.findViewById(R.id.myImage);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListView.removeViewAt(position);
}
});
return convertView;
}
}
You create the adapter like this MyAdapter adapter = new MyAdapter(this, R.layout.myLayout);
The adapters getView method returns a view for a specific position inside the list, you then specify a listener for the image, which when fired will remove that list item the image was in.
There's a slightly better way perfomance wise, by using a ViewHolder class. If you're interested: How to get the parent view of a button within a list adapter?
-
but this will delete view when clicking on whole layout of list row. I want to delete item after clicking on single imageview in that layout, not after clicking on that layout. – Iriminage Jul 22 '14 at 18:42
-
So you're clicking a list item and want to delete an image inside of it? – Simas Jul 22 '14 at 18:43
-
No, sorry. I want to delete item (row) from list after clicking at delete icon, but not after clicking at row layout. – Iriminage Jul 22 '14 at 18:54
There are two option: One implement setOnItemClickListener on your list
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position,
long id) {
//action to delete item from position.
}
});
the other option is when you click the icon you need to implement setOnClickListener inside your adapter.
iviIconDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//delete the item
}
});

- 745
- 5
- 13
You can use a custom adapter and in getView
method add OnClickListener
to delete icon as follow
delIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
list.remove(position); // remove the item from the data list
notifyDataSetChanged();
}
});

- 827
- 8
- 15