我有一个RecyclerView,它可以从SQLite数据库游标中获取数据,而不必将数据存储在ArrayList之前。RecyclerView + SQLite - 从数据库中删除行并调用.notifyItemRemoved在底部临时重新添加行
我尝试删除按钮上某个给定位置的一行,但立即重新添加RecyclerView底部的行。但是,当我关闭并重新打开活动时,条目已不存在(如我所愿)。另外当我尝试点击重新添加的条目时,我得到一个异常,所以它似乎不在那里了。
我GOOGLE了一段时间,但我无法找到答案。它与光标有关吗?从表中删除一行后,是否必须提供一个新的光标到适配器?如果是,如何?
这是我的代码:
public MyViewHolder(View itemView, final RecyclerViewClickListener listener) {
super(itemView);
mDeleteImage = itemView.findViewById(R.id.image_delete);
[...]
mDeleteImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
listener.onDeleteClick(position);
}
}
}
});
}
@Override
public void onDeleteClick(int position) {
SQLiteDatabase database = new MySQLiteHelper(this).getWritableDatabase();
Cursor cursor = database.rawQuery("select * from " + MyContract.MyEntry.TABLE_NAME, null);
cursor.moveToPosition(position);
database.delete(MyContract.MyEntry.TABLE_NAME, MyContract.MyEntry._ID + "=?", new String[] {cursor.getString(cursor.getColumnIndexOrThrow(MyContract.MyEntry._ID))});
mAdapter.notifyItemRemoved(position);
}
谢谢。但我不使用CursorAdapter,所以我没有swapCursor方法。这个CursorAdapter仅适用于ListViews吗? 我试图通过一种方法提供一个新的游标,但它没有奏效。 –
那是自定义回收站视图适配器吗? –
是的。我尝试将mCursor设置为一个新的游标,但它没有奏效。我最初提供Cursor的方式是通过Adapter的构造函数。 –