SQLite 数据库中的项目未在 RecyclerView 中删除
Item from SQLite database not deleting within RecyclerView
我有一个 RecyclerView。当我点击删除按钮时,它从 RecyclerView 中删除了一个项目,但是当我重新启动应用程序时,该项目又回来了。这是我的数据库中的函数 class:
public boolean deleteList(long rowId) {
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
这是我的适配器 class,带有删除按钮:
@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 监视器中也没有得到任何信息。
我该如何解决这个问题?
您正在尝试通过传递当前项目位置的值来删除。当然不行!您需要尝试通过其 ID 或 RecyclerView 中的名称来获取项目,后者意味着您的数据库中的任何项目都不能与 RecyclerView 具有相同的名称。在你的数据库中试试这个 class:
public boolean deleteList(String name) {
return db.delete(DATABASE_TABLE, KEY_NAME + "=" + name, null);
}
在您的适配器中,调用相同的函数,但传递当前项目文本而不是其在 RecyclerView 中的位置。
我有一个 RecyclerView。当我点击删除按钮时,它从 RecyclerView 中删除了一个项目,但是当我重新启动应用程序时,该项目又回来了。这是我的数据库中的函数 class:
public boolean deleteList(long rowId) {
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
这是我的适配器 class,带有删除按钮:
@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 监视器中也没有得到任何信息。 我该如何解决这个问题?
您正在尝试通过传递当前项目位置的值来删除。当然不行!您需要尝试通过其 ID 或 RecyclerView 中的名称来获取项目,后者意味着您的数据库中的任何项目都不能与 RecyclerView 具有相同的名称。在你的数据库中试试这个 class:
public boolean deleteList(String name) {
return db.delete(DATABASE_TABLE, KEY_NAME + "=" + name, null);
}
在您的适配器中,调用相同的函数,但传递当前项目文本而不是其在 RecyclerView 中的位置。