Как удалить элементы из базы данных SQLite через контекстное меню? - PullRequest
0 голосов
/ 29 июня 2019

Пожалуйста, помогите мне понять. У меня есть приложение, в котором я добавляю элементы в базу данных, а затем отображаю его на ListView. Почти все работает нормально, но когда я удаляю элементы через контекстное меню, то верхний первый элемент удаляется. Неважно, какой предмет я выберу.

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

    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.menu, menu);
}

@Override
public boolean onContextItemSelected(MenuItem menuItem) {
    switch (menuItem.getItemId()) {
        case R.id.delete_menu_item:
            String itm_ps = itemView.getItemAtPosition(itemPos).toString();
            ToDoDB.deleteData(itm_ps);
            mAdapter.remove(itm_ps);
            return true;

        case R.id.quit_menu_item:
            finish();
            return true;

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

И код запроса SQL:

public int deleteData(String value) {
    SQLiteDatabase database = this.getWritableDatabase();
    Cursor cursor = database.query(TABLE_NAME,null, null, null, null, null, null);
    if (cursor.moveToFirst()) {
       delete_result = database.delete(TABLE_NAME, KEY_ID + "=?", new String[]{value});
       database.close();
    }
    return delete_result;
}

public Cursor viewData() {
    SQLiteDatabase database = this.getReadableDatabase();
    String query = "SELECT * FROM " + TABLE_NAME;
    Cursor cursor = database.rawQuery(query, null);

    return cursor;
}

1 Ответ

0 голосов
/ 29 июня 2019

Попробуйте это в вашей базе данных sql.

public void delete(String time) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_NAME, KEY_ID + " = ?", new String[]{time});
        db.close();
    }

Также назовите это так:

@Override
public boolean onContextItemSelected(MenuItem menuItem){
    switch(menuItem.getItemId()) {
        case R.id.delete_menu_item:

            AdapterView.AdapterContextMenuInfo info =
(AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
            String key = ((TextView) info.targetView).getText().toString();
            db.delete(String.valueOf(key));
            mAdapter.notifyDataSetChanged();
//  Load items to the database once more like you would do at startup of the application.
            return true;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...