I do something like below:
public class WhitelistActivity extends ListActivity {
private DbAdapter dbHelper;
private SimpleCursorAdapter adapter;
private Cursor recordsCursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.whitelist);
dbHelper = new DbAdapter(this);
dbHelper.open();
recordsCursor = dbHelper.fetchWhitelistRecords();
startManagingCursor(recordsCursor);
String[] from = new String[]{DbAdapter.KEY_W_SENDER};
int[] to = new int[]{R.id.text1};
adapter = new SimpleCursorAdapter(this, R.layout.whitelist_row, recordsCursor, from, to);
setListAdapter(adapter);
...
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()) {
case CONTEXT_MENU_DELETE_ID:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
dbHelper.deleteWhitelistRecord(info.id);
adapter.changeCursor(recordsCursor);
adapter.notifyDataSetChanged();
return true;
}
return super.onContextItemSelected(item);
}
However, when context menu is called and item is deleted, it is not reflected on the list view. What am I missing?
When you change your cursor, you need to update its content. The simplest and recommended way is to create a new cursor (if possible in a Loaded).
recordsCursor = dbHelper.fetchWhitelistRecords();
adapter.changeCursor(recordsCursor);
It is not necessary to notifyDataSetChanged.