0

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?

Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
Iriminage
  • 177
  • 2
  • 17

3 Answers3

0

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?

Community
  • 1
  • 1
Simas
  • 43,548
  • 10
  • 88
  • 116
  • 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
0

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

            }
        });
Giancarlo
  • 745
  • 5
  • 13
0

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();
        }
    });
Omar Albelbaisy
  • 827
  • 8
  • 15