来自SQLite数据库的项目不在RecyclerView中删除

时间:2016-05-15 06:20:15

标签: android sqlite android-sqlite android-recyclerview

我有一个RecyclerView。当我点击删除按钮时,它会从RecyclerView中删除一个项目,但是当我重新启动应用程序时,该项目会返回。这是我的数据库类中的函数:

public boolean deleteList(long rowId) {
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}

这是我的适配器类,带有删除按钮:

@Override
public void onBindViewHolder(RecyclerViewViewHolder viewHolder, final int position) {
    viewHolder.name.setText(list.get(position).name);
    viewHolder.date.setText(list.get(position).date);
    viewHolder.delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            RecyclerViewListSchema item = list.get(position);
            SQLiteDatabaseAdapter database = new SQLiteDatabaseAdapter(view.getContext());
            database.open();

            boolean deleteList = database.deleteList((long) position);
            list.remove(position);
            notifyItemRemoved(position);

            database.close();
        }
    });
}

更新的 我在deleteList函数中添加了一个提交函数,如下所示:

public boolean deleteList(long rowId) {
    db.beginTransaction();

    try {
        db.setTransactionSuccessful();
    }

    catch (Exception e) {
        Log.v("Commit", "Error: + " + e);
    }

    finally {
        db.endTransaction();
    }
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}

我在Android Monitor中也没有得到任何东西。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您试图通过传递当前项目位置的值来删除。当然它不会起作用!您需要尝试通过其ID或RecyclerView中的名称来获取项目,后者意味着数据库中的任何项目和RecyclerView都不能具有相同的名称。在您的数据库类中尝试:

public boolean deleteList(String name) {
    return db.delete(DATABASE_TABLE, KEY_NAME + "=" + name, null);
}

在适配器中,调用相同的函数,但传递当前项目文本而不是它在RecyclerView中的位置。