使用上下文菜单从自定义列表视图中删除项目

时间:2014-08-15 09:59:02

标签: android sqlite listview contextmenu

我有一个使用自定义列表适配器填充的列表视图。

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;
     }

感谢

1 个答案:

答案 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。