我正在创建一个扫描条形码的应用程序,将它们保存在数据库中并通过列表进行管理。 所以,这些是对我的问题感兴趣的类
主要
@Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.scanner_menu);
Button addButton = (Button) findViewById (R.id.addMenuButton);
addButton.setOnClickListener (new OnClickListener(){
public void onClick (View v){
startActivity(new Intent(CodiceBarreActivity.this, AggiungiCodiceActivity.class));
}
});
Button listButton = (Button) findViewById (R.id.ViewlistButton);
listButton.setOnClickListener (new OnClickListener(){
public void onClick (View v){
startActivity(new Intent(CodiceBarreActivity.this, ProdottiSelectionActivity.class));
}
});
}
static final class ProductData {
long _id;
String barcode;
String format;
String title;
String price;
}
}
辅助
private SQLiteDatabase db;
public ProductDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
StringBuilder sql = new StringBuilder();
sql.append("create table ")
.append(PRODUCT_TABLE)
.append("( ")
.append(" _id integer primary key,")
.append(" barcode text,")
.append(" format text,")
.append(" title text,")
.append(" price text")
.append(") ");
db.execSQL(sql.toString());
Log.d(TAG, PRODUCT_TABLE + "table created");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + PRODUCT_TABLE);
Log.d(TAG, PRODUCT_TABLE + "table dropped");
onCreate(db);
}
分贝
private static final String PRODUCT_TABLE = "products";
private static final BigDecimal ONE_HUNDRED = new BigDecimal("100");
private SQLiteDatabase db;
public CodiciDatabase(Context context) {
ProductDatabaseHelper helper = new ProductDatabaseHelper(context);
db = helper.getWritableDatabase();
}
public boolean insert(ProductData product) {
ContentValues vals = new ContentValues();
vals.put("_id", product._id);
vals.put("barcode", product.barcode);
vals.put("format", product.format);
vals.put("title", product.title);
vals.put("price", product.price);
return db.insert(PRODUCT_TABLE, null, vals) != -1;
}
感兴趣的班级
private ProductDatabaseHelper dbHelper;
private static final String PRODUCT_TABLE = "products";
ProductData product = new ProductData();
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbHelper = new ProductDatabaseHelper(this);
}
@Override
protected void onResume(){
super.onResume();
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from " + PRODUCT_TABLE, null);
setListAdapter(new CursorAdapter(this, cursor, true) {
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent){
TextView textView = new TextView(ProdottiSelectionActivity.this);
return textView;
}
@Override
public void bindView (View view, Context context, Cursor cursor){
TextView textView = (TextView) view;
textView.append(cursor.getString(1));
textView.append("\n");
textView.append(cursor.getString(2));
textView.append("\n");
textView.append(cursor.getString(3));
textView.append("\n");
textView.append(cursor.getString(4));
registerForContextMenu(textView);
}
});
}
@Override
protected void onDestroy(){
super.onDestroy();
dbHelper.close();
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
}
}
我需要实现onListItemClick方法,以便你删除所选的项目。我很想找到正确的语法,希望你能帮助我!
答案 0 :(得分:1)
这样的事情应该有效:
db.delete("products", "barcode" + "="+ barcodeToDelete, null);
将barcodeToDelte替换为您要从表中删除的条形码的值。如果您不知道条形码的价值,您可以根据数据库中的任何其他字段将其删除,方法是将它们放入上述方法中的“条形码”。
答案 1 :(得分:1)
在我看来,你可能会在“感兴趣的班级”中遇到错误。你的代码在某些地方有点令人困惑,我不确定你是否使用列表视图。但是使用列表视图并将其绑定到onItemClickListener会很有帮助。您将在要显示项目的布局中使用extends ListActivity
,确保在列表视图布局中放置listview元素。然后填充列表视图,您将拥有:
String[] tableColumnNames = new String[] {
"TABLE COLUMN NAMES SEPARATED BY COMMAS" };
int[] textViewLabelNames = new int[] { "NAMES OF TEXT VIEW LABELS IN XML ROW LAYOUT" };
SimpleCursorAdapter stuff = new SimpleCursorAdapter(this,
R.layout.your_created_xml_row_layout, cursor, tableColumnNames,
textViewLabelNames);
this.setListAdapter(stuff);
然后绑定你的onClickListener:
listView.setOnItemClickListener(new OnItemClickListener() {
//ListView item is clicked
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
});
回头看你的代码:
当onListItemClick is triggered
需要从数据库中删除时,对应于id的行传递给onListItemClick方法。然后,您需要使用cursor.requery()
更新光标以反映视图上的更改。
因此,为了从具有特定ID的数据库中删除项目,您可以执行以下操作:
ProductDatabaseHelper helper = new ProductDatabaseHelper(context);
SQLiteDatabase database = helper.getWritableDatabase();
database.delete("TABLE NAME HERE", "NAME OF ID COLUMN HERE" + "=" + id, null);
database.close();
您还可以查看SQLiteDatabase Docs以获取方法签名的有用说明。