Я собираюсь сделать некоторые предположения в своем ответе.(1) Список того, что вы хотите, чтобы пользователь мог выбрать для удаления, заполнен данными, полученными из базы данных, из которой вы его удаляете, (2) Вы выполнили настройку в onCreate или что-то в этом роде.установить прослушиватель щелчка listView или (3) настроить просмотр списка для регистрации в контекстном меню.Я подозреваю, что вы просто не получаете правильный идентификатор для удаляемого элемента.
В моей настройке у меня есть просмотр списка, который зарегистрирован для контекстного меню, я использую контекстное меню, чтобы позволить им выбрать для редактированияили удалите элемент из списка, чтобы в моем onCreate я звонил registerForContextMenu(this.listView);
В моем контекстном меню я имел:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
menu.setHeaderTitle("Update Item");
menu.add(Menu.NONE, MENU_EDIT_ITEM, 0, "Edit Item");
menu.add(Menu.NONE, MENU_REMOVE_ITEM, 1, "Remove Item");
}
Затем
@Override
public boolean onContextItemSelected(MenuItem item)
{
return (applyMenuChoice(item) || super.onContextItemSelected(item));
}
Затем
private boolean applyMenuChoice(MenuItem item)
{
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId())
{
case MENU_EDIT_ITEM:
{
// Since the user wants to edit an existing device we need to pass the
// database id of the device - not it's position - to the details screen
long idNum = info.id;
Intent i = new Intent(getApplicationContext(), DeviceDataActivity.class);
i.putExtra(DeviceListViewActivity.ID_EXTRA, String.valueOf(idNum));
startActivityForResult(i, 0);
break;
}
case MENU_REMOVE_ITEM:
{
long idNum = info.id;
deviceDatabaseHelper.deleteItem(String.valueOf(idNum));
initList();
break;
}
default:
{
return false;
}
}
return true;
}// end applyMenuChoice
В коде моей базы данных помощника я вызываю следующее:
public void deleteItem(String id)
{
SQLiteDatabase db = getWritableDatabase();
db.delete(TABLE_NAME, _ID + "=?", new String[]
{ id });
db.close();
}
Еще одна полезная функция для получения определенного элемента.Обратите внимание, если не забудьте заменить Item / YOUR_ITEM на ваш объект и при необходимости обновите запрос именем таблицы (YOUR_TABLE) и BaseColumns._ID.
/**
* Use this method to return a single item object based on it's id
* NOTE - from calling classes id may not be equal to position
* @param id - the ID of the device being requested
* @param db - the database to get it from
* @return YOUR_ITEM - that device associated with the id
*/
public static YOUR_ITEM getById(String id, SQLiteDatabase db)
{
String[] args = { id };
Cursor c = db.rawQuery( "SELECT * FROM YOUR_TABLE WHERE " +
BaseColumns._ID + "=?", args );
c.moveToFirst();
Item result = new Item().loadFrom(c);
c.close();
return (result);
}
Я не очень опытный парень из БД, поэтомуЯ в значительной степени опирался на множество примеров, в которых был закодирован вспомогательный класс базы данных (extends SQLiteOpenHelper), который облегчал получение и размещение данных в SQLiteDataBase.Надеюсь, это поможет!