我一直在搜索和搜索,没有运气,这是我的代码
// Product List
public void setProductList() {
productDB = new DatabaseHelper(this);
listView = (ListView) findViewById(R.id.list);
listAdapter = listView.getAdapter();
Cursor prodView = productDB.getAllData();
prodView.moveToFirst();
ArrayAdapter<String> listAdaptor = new ArrayAdapter<String>(this, R.layout.medicinelistmenu, R.id.productlistsTextView1);
while (prodView.moveToNext()) {
listAdaptor.add(prodView.getString(1));
}
listView.setAdapter(listAdaptor);
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) {
productDB.deleteProduct(id);
Toast.makeText(medicineList.this, "Item Deleted", Toast.LENGTH_LONG).show();
finish();
startActivity(getIntent());
return true;
}
});
}
&#13;
使用onItemLongClick函数,其他帖子告诉我,AdapterView中的 long 值将是SQLLite ID列,但它与数组中的位置值相同。
这是我的DatabaseHelper类中的删除功能
public void deleteProduct(long ID)
{
SQLiteDatabase productsdb = this.getWritableDatabase();
productsdb.execSQL("DELETE FROM "+ PRODTABLE_NAME +" WHERE ID = "+ ID);
}
任何人都可以了解如何获取数据库ID值。
答案 0 :(得分:1)
Long是所点击项目的行ID,而不是数据库中产品的ID。
在DBHelper类中创建一个返回ID
的方法,其参数为String productName
修改onItemLongClick()
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) {
TextView prdName = arg1.findViewById(R.id.textView_prdname);
// now call the method which take productName as parameter and return productId
int prdID = productDB.getProductID(prdName.getText().toString());
// Now Pass that ID to deleteProduct
productDB.deleteProduct(prdID);
Toast.makeText(medicineList.this, "Item Deleted", Toast.LENGTH_LONG).show();
finish();
startActivity(getIntent());
return true;
}
如果名称是唯一的而不是DELETE FROM table WHERE ID = id
,您可以使用
DELETE FROM table WHERE NAME = name
此处的名称可以从prdName.getText()
获取,这样您就只需要执行一个查询。