从ContextMenu获取ExpandableListView的选定项

时间:2013-09-28 16:42:42

标签: android contextmenu expandablelistview

您好我从ContextMenu获取ExpandableListView项目的ID有问题,我需要从我的数据库中删除该条目(即时通讯使用内容提供商)。

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    menu.add(Menu.NONE, MENU_EDIT, Menu.NONE, "Edit");
    menu.add(Menu.NONE, MENU_REMOVE, Menu.NONE, "Remove");
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuItem.getMenuInfo();
    switch (item.getItemId()) {
        case MENU_EDIT:
            editEntry(info.id);
            return true;
        case MENU_REMOVE:
            deleteEntry(info.id);
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}

private void deleteEntry(long id) {
    Uri uri = Uri.parse(DatabaseManager.CONTENT_URI + "/" + id);
    getActivity().getContentResolver().delete(uri, null, null);
}

ContextMenu正在显示但是当我点击“删除”时没有任何反应。你能告诉我该怎么办?

1 个答案:

答案 0 :(得分:3)

因为ExpandableListView有两个级别 - 组和子级 - “ID”很难直接解释。

您需要将ExpandableListContextMenuInfo中的信息分解为组位置和子位置。

使用这两个值,您可以从您用作ExpandableListView的数据源的适配器(此处为 this.exandableListAdapter )中检索所选项目。适配器的 getChild()返回的对象可以转换为最初放入适配器的任何(自定义)类型:

ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuItem.getMenuInfo();
int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);
MyItemClass item =(MyItemClass) this.expandableListAdapter.getChild(groupPos, childPos);

通过此,您可以轻松获取数据库中的ID或您需要的任何特定信息。