Есть простая БД, состоящая из одной таблицы в которой 2 колонки (_id, name);
В данный момент разбираюсь с удалением элементов ListView и удалением необходимой строчки в БД. Сама строчка из ListView удаляется, не могу пока понять как грамотно еще и из БД удалять то, что выбрал. Помогите пжлст.
public class MainActivity extends Activity {
private static final String DATABASE_NAME = "myDatabase.db";
private static final String DATABASE_TABLE = "mainTable";
private static final String COLUMN_NAME = "name";
private static final String COLUMN_ID = "_id";
private static final String DATABASE_CREATE = "create table if not exists "
+ DATABASE_TABLE + " (_id integer primary key autoincrement,"
+ COLUMN_NAME + " text not null);";
private static final int CM_DELETE_ID = 1;
SQLiteDatabase myDatabase;
ListView lv;
SimpleAdapter sAdapter;
ArrayList<Map<String, String>> data;
Map<String, String> m;
Cursor c;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myDatabase = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);
myDatabase.execSQL(DATABASE_CREATE);
// упаковываем данные в понятную для адаптера структуру
data = new ArrayList<Map<String, String>>();
c = myDatabase.query(DATABASE_TABLE, new String[] { COLUMN_ID, COLUMN_NAME }, null, null, null, null, null);
//считываем данные с БД и заносим их в data
if (c.moveToFirst()) {
do {
m = new HashMap<String, String>();
m.put(COLUMN_ID , String.valueOf(c.getInt(0)));
m.put(COLUMN_NAME, c.getString(1));
data.add(m);
} while (c.moveToNext());
}
// массив имен атрибутов, из которых будут читаться данные
String[] from = { COLUMN_NAME };
// массив ID View-компонентов, в которые будут вставлять данные
int[] to = { R.id.tvText};
// создаем адаптер
sAdapter = new SimpleAdapter(this, data, R.layout.item, from, to);
// определяем список и присваиваем ему адаптер
lv = (ListView) findViewById(R.id.lvSimple);
lv.setAdapter(sAdapter);
registerForContextMenu(lv);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
CharSequence text = ((TextView) v).getText();
int duration = Toast.LENGTH_LONG;
Context context = getApplicationContext();
**//КАК ПРАВИЛЬНО ВЫВЕСТИ id из БД?** (тут чушь)
String where = " name = " + "'" + text + "'";
c = myDatabase.query(true, DATABASE_TABLE,
new String[] { "_id" }, where, null, null, null, null,
null);
c.moveToFirst();
CharSequence columnValue = String.valueOf(c.getInt(0));
Toast.makeText(context, columnValue, duration).show();
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, CM_DELETE_ID, 0, "Удалить запись");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
if (item.getItemId() == CM_DELETE_ID) {
// получаем инфу о пункте списка
AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item
.getMenuInfo();
// удаляем Map из коллекции, используя позицию пункта в списке
data.remove(acmi.position);
// уведомляем, что данные изменились
sAdapter.notifyDataSetChanged();
myDatabase.delete(DATABASE_TABLE, COLUMN_ID + " = " **ЧТО СЮДА ВПИСАТЬ???**, null);
return true;
}
return super.onContextItemSelected(item);
}
}