2012-06-15 5 views
0

Я создаю приложение, которое сканирует штрих-коды, сохраняет их в db и управляет ими через список. Таким образом, эти классы, которые заинтересованы в моей проблемеУдалить элемент из списка

Main

@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 таким образом, чтобы удалить выбранный item.I'm схожу с ума ищет правильный синтаксис, я надеюсь, что вы можете мне помочь!

+1

Stackoverflow - это не сайт генерации кода. – JoxTraex

+0

нет, но это эксперт сайта, и мне это нужно. Я не буду замолчать. –

+0

Стена с кодом == плохо. Мои глаза болят. Boo hoo. –

ответ

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().

Так что для того, чтобы удалить элемент из базы данных с определенным идентификатором вы можете сделать это:

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 за полезное описание метода подписи.

1

что-то, как это должно работать:

db.delete("products", "barcode" + "="+ barcodeToDelete, null); 

заменить barcodeToDelte со значением штрих-кода, который вы хотите удалить из таблицы. Если вы не знаете значение штрих-кода, вы можете удалить его на основе любого из других полей в базе данных, добавив их в «штрих-код» в методе выше.

Смежные вопросы