我有一个类似的问题,在这里enter link description here
,但是建议的解决方案对我都不起作用。 我的recyclerview列出了sqlite数据库中的项目,当我向左滑动时,相应的数据已成功从数据库中删除。 昨天由于某种原因,一切正常,删除的项目从列表中消失,但是从今天起,该项目仍在recyclerview中可见。 这是我的代码:
ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.LEFT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
AlertDialog deleteFileDialog = new AlertDialog.Builder(DayListActivity.this)
.setTitle()
.setMessage()
.setPositiveButton(ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
removeDay((long)viewHolder.itemView.getTag());
removeRecords((long)viewHolder.itemView.getTag());
getAllDays();//try to refresh recyclerview by calling function to
//load data from db
dayListAdapter.notifyItemRemoved(viewHolder.getAdapterPosition());
dayListAdapter.notifyDataSetChanged();
dialog.dismiss();
}
})
.setNegativeButton(R.string.file_delete_dialog_cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create();
deleteFileDialog.show();
}
};
答案 0 :(得分:0)
首先,在删除数据库时,“ getAllDays()”是否从数据库返回正确的数据?并将新数据从db设置到您的适配器中吗?
第二,如果要这样做,则不应调用notifyItemRemoved和notifyDataSetChanged,因为在设置新数据时,您应该已经调用了它。
第三,如果没有,则不必调用这两种方法。如果更改了所有数据,则可以使用notifyDataSetChanged再次绑定所有数据(不建议)。在这种情况下,通常需要说notifyItemRemoved