从列表中删除项目

时间:2012-06-15 20:58:37

标签: android list view listitem

我正在创建一个扫描条形码的应用程序,将它们保存在数据库中并通过列表进行管理。 所以,这些是对我的问题感兴趣的类

主要

@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方法,以便你删除所选的项目。我很想找到正确的语法,希望你能帮助我!

2 个答案:

答案 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以获取方法签名的有用说明。