android - removing item from ListView on long click

38,222

Solution 1

You shouldn't use Arrays, you should use ArrayList to remove and add items to a Listview.

Once the Array size is declared you can modify the data in particular index but cannot remove the items or add to it.

So Take an ArrayList and just when you long click on the ListView Item, just call remove method of Arraylist and notify the data set changed.

Example:

ArrayList<String> al = new ArrayList<String>();

inside your longclick write the below code to remove item.

al.remove(arg2);//where arg2 is position of item you click
myAdapter.notifyDataSetChanged();

Solution 2

try

lv.setOnItemLongClickListener(new OnItemLongClickListener() {

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view,
            int position, long arg3) {

              myAdapter.remove(some_data[position]);
              myAdapter.notifyDataSetChanged();

        return false;
    }

});
Share:
38,222
Droidman
Author by

Droidman

android enthusiast and developer since around 2011. Passionate user and advocate of kotlin language. I love coding, teamwork, open-source, discovering &amp; trying out new exciting tech. And I am indeed a big fan of the Stargate franchise ;) Currently an Android developer at Thalia Digital Retail Solutions in Berlin, building the Douglas e-commerce app for Parfümerie Douglas.

Updated on February 09, 2022

Comments

  • Droidman
    Droidman about 2 years

    I'm having some troubles while trying to remove an item from the list view on long click. Below is the code:

    public class MListViewActivity extends ListActivity {
    
    private ListView lv;
    private String[] some_data = null;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        some_data = getResources().getStringArray(R.array.mdata);
    
        // Bind resources Array to ListAdapter
        ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this,
                R.layout.list_item, R.id.label, some_data);
        this.setListAdapter(myAdapter);
    
        lv = getListView();
        lv.setDividerHeight(3);
    
        lv.setOnItemLongClickListener(new OnItemLongClickListener() {
    
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                    int arg2, long arg3) {
    
                // Can't manage to remove an item here
    
                return false;
            }
        });
    }
    

    Any help is appreciated

  • Droidman
    Droidman over 11 years
    throws an UnsupportedOperationException
  • Clocker
    Clocker about 9 years
    exactly was I was looking for. If you are using a ListView or any subclass of it, use the method above to get the held item from the list
  • coderpc
    coderpc almost 7 years
    I'm having a similar issue. What is lvStat here in your code ?
  • Borshon saydur rahman
    Borshon saydur rahman almost 7 years
    @pc listview reference
  • coderpc
    coderpc almost 7 years
    I have VideoView, ImageView and TextView in my ListView. Its working for ImageView and TextView but not for VideoView