【发布时间】:2018-12-29 16:04:24
【问题描述】:
从列表视图中删除该项目时,该项目会被删除,但在返回活动时,该项目会重新出现。 这是我的 Main2Activity 代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
position = intent.getIntExtra("position", 0);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listItem);
listView.setAdapter(adapter);
viewData1();
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, final int pos, long id) {
final int itemToDelete = pos;
new AlertDialog.Builder(Main2Activity.this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Are you sure?")
.setMessage("Do you want to delete this location?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
listItem.remove(itemToDelete);
databaseHelper1.deleteLocation(itemToDelete, position);
adapter.notifyDataSetChanged();
}
}
)
.setNegativeButton("No", null)
.show();
return true;
}
});
}
private void viewData1() {
Cursor cursor = databaseHelper1.viewData1(position);
if (cursor.getCount() == 0) {
Toast.makeText(this, "No data to show", Toast.LENGTH_SHORT).show();
} else {
while (cursor.moveToNext()) {
Log.i("message", "Data got");
listItem.add(cursor.getString(1));
}
adapter.notifyDataSetChanged();
}
}
数据库助手:
public void deleteLocation(int itemToDelete,int position)
{
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
String itemDelete = Integer.toString(itemToDelete);
Log.i("itemdel",itemDelete);
if(position ==0)
{
String Id = (ID1);
Log.i("Id",Id);
String query = " Delete from "+DB_TABLE1 + " where "+ Id + " = " + itemDelete;
sqLiteDatabase.execSQL(query);
sqLiteDatabase.delete(DB_TABLE1,ID1 + " = "+ itemDelete, null);
sqLiteDatabase.compileStatement(query);
Log.i("del"," executed")
}
}
public Cursor viewData1(int position)
{
SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
Cursor cursor = null;
if (position ==0)
{
String query = "Select * from " + DB_TABLE1;
cursor = sqLiteDatabase.rawQuery(query, null);
}
return cursor;
}
会发生什么: 删除前:
删除花园后:
关于重启活动:
如何将删除提交到数据库?谢谢。
【问题讨论】:
-
如果只有位置 0
if(position ==0),您正在执行数据库删除操作。这是那个问题。 -
'pos' 表示将被删除的位置,而 'position' 是我的活动意图编号。 @RakeshKumar
-
@Navdik,是的,它将被删除,因为您从以前的
activity得到它。但是Sqlite查询只有在position=0时才会执行操作。检查您在Log中的位置。如果不为 0,则不会从db中删除。 -
我已经指定了 'position=0' 条件,因为它是 Main2Activity 独有的。其他活动也有其独特的“位置”。另一方面,“pos”是长按的项目。如果单击该项目,它将仅在我仍在该活动中的期间删除,而不管“位置”@RakeshKumar
-
试试这个查询
sqLiteDatabase.delete(yourTableName, "yourColumnName" + "=?",new String[]{value});。
标签: android sqlite android-activity