简体   繁体   中英

Delete item from ListView using onCreateContextMenu

How to delete item from ListView using onCreateContextMenu? There is some problem in the code below. Any solution?

When item in listview is long pressed a menu popups in which there is an option of delete.

public class ContextMenuTest extends AppCompatActivity {

    ListView listView;
    String []name={"ANKUSH", "ANOUSHKA", "SHIVA", "SOMANSHU"};
    String current;
    ArrayAdapter<String> adapter;
    int pos;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_context_menu_test);

        listView = (ListView) findViewById(R.id.lvContextMenu);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, name);

        listView.setAdapter(adapter);
        registerForContextMenu(listView);
    }


    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);

        menu.setHeaderTitle("SELECT OPTION");
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_test, menu);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        switch (item.getItemId())
        {
            case R.id.delete:
                adapter.remove(adapter.getItem(info.position));
                break;
        }
        return true;
    }

}

In the onContextItemSelected method, add adapter.notifyDataSetChanged() to notify the adapter of changes to the data.

public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId())
    {
        case R.id.delete:
            adapter.remove(adapter.getItem(info.position));
            adapter.notifyDataSetChanged();
            break;
    }
    return true;
}

For deleting item from ListView using onCreateContextMenu you can do like this:

int currentposition;

listview.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
        currentposition = info.position;
        menu.setHeaderTitle("SELECT OPTION");
        menu.add(0, v.getId(), 0, "Delete ");

    }

});

Then:

public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
            .getMenuInfo();
    if (item.getTitle() == "Delete ") {
        mArray.remove(currentposition);
        ca.notifyDataSetChanged();
        Toast.makeText(this, "Deleted ", Toast.LENGTH_SHORT)
                .show();
    } 
    return true;
}

This Works

public class ContextMenuTest extends AppCompatActivity {

ListView listView;
List<String> list = new ArrayList<String>();
ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_context_menu_test);

    listView = (ListView) findViewById(R.id.lvContextMenu);

    list.add("ANKUSH");
    list.add("ANOUSHKA");
    list.add("SHIVA");
    list.add("SOMANSHU");

    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);

    listView.setAdapter(adapter);
    registerForContextMenu(listView);
}


@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    menu.setHeaderTitle("SELECT OPTION");
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_test, menu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

    switch (item.getItemId())
    {
        case R.id.delete:
            list.remove(info.position);
            adapter.notifyDataSetChanged();
            return true;

        default:
            return super.onContextItemSelected(item);
    }
}
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM