Как удалить элемент из списка и из базы данных? - PullRequest
0 голосов
/ 26 декабря 2011

Я знаю, что этот вопрос задавался много раз, но многие из ответов, которые я нашел, были неудовлетворительными.

У меня есть Baseadapter, который отображает список через базу данных.Информация передается из базы данных в список через курсор, который добавляет курсор к массиву списков, который затем заполняет представление списка.Я хотел бы удалить элемент списка через контекстное меню и удалить его из списка и базы данных.В настоящее время я использую объект adaptercontextmenuinfo для получения позиции и / или идентификатора, который я передаю методу удаления в классе базы данных, но info.id не соответствует _id базы данных.В настоящее время я могу успешно удалить запись строки из listadapter, но НЕ из базы данных.Любая помощь приветствуется.(примечание: в моей базе данных есть 3 столбца, первый из которых _id) ContextMenu java:

@Override
    public boolean onContextItemSelected(MenuItem item) {
        if(item.getTitle() == "Delete"){ //if "delete" is selected
            AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

            dba.deleteRow(info.id);
            DATA.remove(info.position);
            adapter.notifyDataSetChanged();

Метод удаления строки базы данных:

public void deleteRow(long rowId){
        db = dbhelper.getWritableDatabase();
        try{
            db.delete(Constants.TABLE_NAME, Constants.KEY_ID + "="+rowId,null);
        }catch(Exception e){
        }
    }

Я знаю, что задействовано много кодаВот.Если вы хотите больше, дайте мне знать.Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 26 декабря 2011

Сравнение строк в Java выполняется методами .equals() или equalsIgnoreCase(), а не == Что может быть причиной того, что ваше заявление недостижимо. Если вы делаете "this"=="that", значит, вы проверяете, имеют ли они оба одинаковые ссылки. (да, это достижимо, поскольку оба они являются строками: P)

Убедитесь, что ваш объект базы данных не нулевой, а также проверьте, не обнаружено ли какое-либо исключение. Плюс: попробуйте удалить данные также из курсора.

0 голосов
/ 26 декабря 2011

Я разобрался с ответом. Вот оно:

        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        Cursor c = dba.getsavedcontacts();
        c.moveToPosition(info.position);
        String id = c.getString(c.getColumnIndex(Constants.KEY_ID));
                    dba.open();
            dba.deleteRow(Long.parseLong(id));//remove entry from database according to rowID
            DATA.remove(info.position); //remove entry from arrayadapter, will remove entry from listview
            adapter.notifyDataSetChanged();
            c.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...