SQLite ID column and onItemLongClick



我一直在搜索和搜索没有运气,这是我的代码

// 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;
            }
        });
    }

与onItemLongClick功能,其他帖子告诉我值在AdapterView将是SQLLite ID列,但它是相同的值在数组中的位置。

这是我的DatabaseHelper类中的delete函数

    public void deleteProduct(long ID)
{
    SQLiteDatabase productsdb = this.getWritableDatabase();
    productsdb.execSQL("DELETE FROM  "+ PRODTABLE_NAME +" WHERE ID = "+ ID);
}

谁能透露任何关于如何获得数据库ID值请。

Long是所单击项的行id,而不是DB中产品的id。

在DBHelper类中创建一个返回ID的方法,参数String productName

Edit 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()
得到,这样你只需要执行一个查询。

最新更新