我有一个使用自定义列表适配器填充的列表视图。
private void populateListView(View v) {
final DatabaseHandler db = new DatabaseHandler(getActivity());
ArrayList<Data> data = new ArrayList<Data>();
data = db.getData();
//custome listview populated from sqlite alarms table
final CustomLockListAdapter customlockListAdapter = new CustomLockListAdapter(
getActivity(), data);
lv.setAdapter(customlockListAdapter);
registerForContextMenu(lv);
}
使用此
从sqlite数据库中提取数据public ArrayList<Data> getData() {
final ArrayList<Data> DataList = new ArrayList<Data>();
DataList.clear();
// Select All Query
final String selectQuery = "SELECT * FROM " + TABLE_ALARMS;
final SQLiteDatabase db = this.getWritableDatabase();
final Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor != null && cursor.getCount() != 0)
if (cursor.moveToFirst())
do {
final Data data = new Data();
data.setName(cursor.getString(1));
data.setStart_hr(cursor.getInt(2));
data.setStart_min(cursor.getInt(3));
data.setStop_hr(cursor.getInt(4));
data.setStop_min(cursor.getInt(5));
// Adding data to list
DataList.add(data);
} while (cursor.moveToNext());
cursor.close();
// return contact list
return DataList;
}
然后我按如下方式创建上下文菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Options");
menu.add(0, v.getId(), 0, "Edit");
menu.add(0, v.getId(), 0, "Delete");
menu.add(0, v.getId(), 0, "Resend");
}
现在我想要删除所选的列表视图项但是我被卡住了,我如何引用正确的行?
@Override
public boolean onContextItemSelected(MenuItem item) {
if (item.getTitle() == "Edit") {
Toast.makeText(getActivity(), "Edit Invoked!", Toast.LENGTH_SHORT).show();
} else if (item.getTitle() == "Delete") {
final DatabaseHandler db = new DatabaseHandler(getActivity());
db.deleteAlarm();
} else if (item.getTitle() == "Resend") {
Toast.makeText(getActivity(), "Resend invoked", Toast.LENGTH_SHORT).show();
} else {
return false;
}
return true;
}
感谢
答案 0 :(得分:0)
现在我想要删除所选的列表视图项但我被卡住了, 我该如何引用正确的行?
您需要使用正确的工具来查找行:
@Override
public void onCreateContextMenu(ContextMenu menu, View arg1, ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
int position = info.position;
获得该位置后,您可以通过执行以下操作在充气菜单后再次找到正确的行:
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
int position = info.position;
注意:可扩展列表视图具有contextMenuInfo的不同子类。您必须使用正确的子类,或者使用instanceof进行测试,如果由于某种原因您可能会收到多种类型的menuInfo。