如何从onContextItemSelected确定项目所属的类

时间:2013-03-01 06:44:12

标签: android database object contextmenu expandablelistview

我有一个expandListView diaryDisplaylist

这是适配器 DiaryExpandListAdapter mAdapterForAll ,它将用于填充diaryDisplayList

执行此操作的代码段:

    mAdapterForAll = new DiaryExpandListAdapter(this, diaryList);
    diaryDisplaylist.setAdapter(mAdapterForAll);

日记表的类型为:

    diaryList = new ArrayList<Object>();

diaryList将包含来自大约8个数据库的所有项目,根据数据库中存在的条目的日期对其进行分组。 它完美地显示出来。

现在我的扩展列表中包含了属于不同数据库的元素。

因此,我使用的编辑和删除功能

    diaryDisplaylist.setOnCreateContextMenuListener(this);

contextMenu的代码段:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
    int type = ExpandableListView.getPackedPositionType(info.packedPosition);

    if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {

        menu.add(0, Constants.MENU_EDIT, 0, "Edit");
        menu.add(0, Constants.MENU_DELETE, 1, "Delete");
    }
}

@Override
public boolean onContextItemSelected(android.view.MenuItem item) {

    ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();

    switch (item.getItemId()) {

    case Constants.MENU_EDIT:
        // once i get item belonging to respective database i can edit
        return true;

    case Constants.MENU_DELETE:

        return true;

    default:
        return super.onContextItemSelected(item);
    }
}

在contextMenuItem中选择了如何找到该项所属的数据库? 我不能使用适配器找到我的对象,因为我在contextItemSelected中没有groupPosition和childPosition。 如果我能得到那些我可以简单使用的那些。

Object selectedObject = mAdapterForAll.getChild(groupPosition, childPosition); 

然后使用selectedObject我可以找到

if(selectedObject isInstanceOf db1)

2 个答案:

答案 0 :(得分:1)

获得我使用的小组和小孩位置

Object obj = diaryList.get((int) info.packedPosition);
在onContextItemSelected它工作。

答案 1 :(得分:0)

很抱歉上面的代码有问题,这个代码可以帮我确定从扩展列表视图中的组和子位置

int groupPos = 0, childPos = 0;
int type = ExpandableListView.getPackedPositionType(info.packedPosition);
if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
    groupPos = ExpandableListView
            .getPackedPositionGroup(info.packedPosition);
    childPos = ExpandableListView
            .getPackedPositionChild(info.packedPosition);
}