1

我有一个 expandListView diaryDisplaylist

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

执行此操作的代码片段:

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

日记列表的类型:

    diaryList = new ArrayList<Object>();

diaryList 将包含来自大约 8 个数据库的所有项目,expandlist 根据数据库中存在的条目时间日期对这些数据库进行分组。它完美地展示了它。

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

所以对于我使用的编辑和删除功能

    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 selected 中,我如何找到该项目所属的数据库?我无法使用适配器找到我的对象,因为我在 contextItemSelected 中没有 groupPosition 和 childPosition。如果我能得到那些我可以简单地使用的。

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

然后使用 selectedObject 我可以发现

if(selectedObject isInstanceOf db1)
4

2 回答 2

1

获得我使用的组和子位置

Object obj = diaryList.get((int) info.packedPosition);

在 onContextItemSelected 中它起作用了。

于 2013-03-01T09:24:48.263 回答
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);
}
于 2013-04-03T15:51:44.810 回答