从 RecycleView 中的数据库中删除数据
Delete data from Database inside RecycleView
我需要你的帮助。我想通过 RecyclerView 中的 SwipeToDelete 从我的数据库中删除数据。
我已经有一个 Swipe class 可以从 RecycleView 中删除项目,我可以从该列表中删除项目,但不能从数据库中删除项目。
我试过在 NoteAdapater(Recycler Adapter)中调用数据库并使用 removeItem(int position) 方法删除我想要的项目,如下所示:
public void removeItem(int position){
db.deleteNote(position);
noteList.remove(position);
notifyItemRemoved(position);
}
这是 MainActivity 代码:
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
NoteAdapter adapter;
List<Note> myList;
FloatingActionButton fab;
DBHelper db = new DBHelper(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
initializeViews();
myList = db.getAllNotes();
adapter = new NoteAdapter(this,myList);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNewNote();
}
});
ItemTouchHelper.Callback callback = new Swipe(adapter);
ItemTouchHelper helper = new ItemTouchHelper(callback);
helper.attachToRecyclerView(recyclerView);
}
数据库中删除数据的代码:
public void deleteNote(int note){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, KEY_ID + " = ?",new String[] {String.valueOf(note)});
}
您的问题在这里 db.deleteNote(position);
您的查询表明您正在删除一个 ID 等于传递参数 deleteNote(int note)
的项目。
所以你需要做的是传递一个笔记id,而不是一个位置。类似于:
db.deleteNote(noteList.get(position).getId());
我需要你的帮助。我想通过 RecyclerView 中的 SwipeToDelete 从我的数据库中删除数据。
我已经有一个 Swipe class 可以从 RecycleView 中删除项目,我可以从该列表中删除项目,但不能从数据库中删除项目。
我试过在 NoteAdapater(Recycler Adapter)中调用数据库并使用 removeItem(int position) 方法删除我想要的项目,如下所示:
public void removeItem(int position){
db.deleteNote(position);
noteList.remove(position);
notifyItemRemoved(position);
}
这是 MainActivity 代码:
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
NoteAdapter adapter;
List<Note> myList;
FloatingActionButton fab;
DBHelper db = new DBHelper(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
initializeViews();
myList = db.getAllNotes();
adapter = new NoteAdapter(this,myList);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNewNote();
}
});
ItemTouchHelper.Callback callback = new Swipe(adapter);
ItemTouchHelper helper = new ItemTouchHelper(callback);
helper.attachToRecyclerView(recyclerView);
}
数据库中删除数据的代码:
public void deleteNote(int note){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, KEY_ID + " = ?",new String[] {String.valueOf(note)});
}
您的问题在这里 db.deleteNote(position);
您的查询表明您正在删除一个 ID 等于传递参数 deleteNote(int note)
的项目。
所以你需要做的是传递一个笔记id,而不是一个位置。类似于:
db.deleteNote(noteList.get(position).getId());