之前可能会问过这个问题,但其他问题与我的代码没有相似之处。我的SQLite表非常简单:我拥有的只是我的ID和TO_DO_NAME列,我想在ListItem调用onLongClick()时删除一行。我已经实现了长按功能,但是当我重新启动应用程序时,同样的项目就在那里。这是我的DatabaseHelper:
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "todo.db";
public static final String TABLE_NAME = "student";
public static final String ID = "id";
public static final String TO_DO = "todo";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String CREATE_TO_DO_TABLE = "CREATE TABLE "
+ TABLE_NAME
+ "("
+ ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ TO_DO
+ " TEXT"
+ ")";
sqLiteDatabase.execSQL(CREATE_TO_DO_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(sqLiteDatabase);
}
public boolean insertData(String todo) {
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(TO_DO, todo);
long result = sqLiteDatabase.insert(TABLE_NAME, null, contentValues);
if (result == -1) {
return false;
} else {
return true;
}
}
public Cursor getListContents() {
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
Cursor data = sqLiteDatabase.rawQuery("SELECT * FROM " + TABLE_NAME, null);
return data;
}
}
这是我的更新方法,它负责单行删除:
public int itemDeleteFromDatabase(long id) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
int deleteFromDatabase = database.delete(TABLE_NAME, ID + "=" + id, null);
listItems.setAdapter(adapter);
return deleteFromDatabase;
}
我从我的List项目中调用该方法长按:
listItems.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapter, View item, int position, long id) {
toDoItems.remove(position);
itemDeleteFromDatabase(position);
MainActivity.this.adapter.notifyDataSetChanged();
return true;
}
});
就像我说的那样,它仍然存在。
更新
这是我从以下位置添加数据的地方:
public void addItem(View v){
EditText newItem = (EditText) findViewById(R.id.itemInputEditText);
String item = newItem.getText().toString();
databaseHelper.insertData(item);
adapter.add(item);
newItem.setText("");
}
答案 0 :(得分:1)
itemDeleteFromDatabase(position);
中的位置不是数据库中的ID
。如果您要根据ID
进行删除,则必须从ID
中绑定的数组中获取RecyclerView
。
如果您直接使用数据库中的Curosr绑定RecyclerView,则必须在long id
函数中传递itemDeleteFromDatabase
。因为它返回数据库的自动索引ID。