我有一个RecyclerView,可以从SQLite数据库游标中获取数据,而不会将数据存储在ArrayList中。
我尝试删除按钮单击时给定位置的行,但它立即重新添加了RecyclerView底部的行。当我关闭并重新打开活动时,条目消失了(因为我想要它)。此外,当我尝试单击重新添加的条目时,我得到一个异常,所以它似乎不再存在。
我用谷歌搜索了一段时间,但我找不到答案。它与光标有关吗?从表中删除行后,是否必须向适配器提供新的Cursor?如果是,怎么样?这是我的代码:
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);
}
答案 0 :(得分:0)
您认为需要更新光标。是的,您需要,因为notifyItemRemoved(position)
将从本地列表中删除该条目。但是当您尝试滚动数据时,将从光标中获取数据,它会将数据发现到cursor
。
您最初将光标设置到适配器的方式与更新光标的方式相同或您可以使用swapCursor
或changeCursor
方法拨打notifyDataSetChanged()
。
有关RecyclerView
光标的更多帮助,请查看this。
由于