单击PopUp菜单项时如何获取listitem id?

时间:2014-07-14 06:55:18

标签: android android-layout popupmenu

在我的应用程序中,我在listview中附加了每个项目的弹出菜单。当我们点击弹出菜单图标时,弹出菜单还有两个项目。我在我的活动中实现了OnMenuItemClickListener来监听弹出的菜单项点击工作正常。但问题是我如何才能知道当我点击任何listview项目的弹出菜单图标时,listitem id(不是弹出菜单项ID)。弹出菜单代码如下:

public void showPopup(View v) {
        PopupMenu popup = new PopupMenu(this, v);
        popup.setOnMenuItemClickListener(this);
        popup.inflate(R.menu.actions);
        popup.show();
    }

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_play:
                return true;
            default:
                return false;
        }
    }

1 个答案:

答案 0 :(得分:3)

请告诉我你想知道什么是“ listitem id ”?我怀疑它是“ listitem视图的id ”。可能你在考虑“位置”,对吧?

我不知道你从哪里打电话给 showPopup(查看v),但你还需要在那里传递位置:

public void showPopup(View v, int listItemPosition) {
    PopupMenu popup = new PopupMenu(this, v);
    popup.setOnMenuItemClickListener(this);
    popup.inflate(R.menu.actions);
    popup.show();
}

您的目标是在 onMenuItemClick(MenuItem项目)回调中了解此位置。
实现此目的的最简单方法是创建变量“listItemPositionForPopupMenu”,将此位置存储在那里并在 onMenuItemClick 回调中读取它:

private int listItemPositionForPopupMenu;

public void showPopup(View v, int listItemPosition) {
    listItemPositionForPopupMenu = listItemPosition;
    PopupMenu popup = new PopupMenu(this, v);
    popup.setOnMenuItemClickListener(this);
    popup.inflate(R.menu.actions);
    popup.show();
}

@Override
public boolean onMenuItemClick(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_play:
            // read the listItemPositionForPopupMenu here
            return true;
        default:
            return false;
    }
}

您还可以通过许多其他方式执行此操作,例如在构造函数中使用 listItemPosition 变量创建自己的 OnMenuItemClickListener 侦听器,并使用 onMenuItemClick创建自定义界面(MenuItem项目) ,int listItemPosition)。或者你可以创建一个匿名类,然后你不需要 listItemPositionForPopupMenu 成员变量:

public void showPopup(View v, final int listItemPosition) {
    PopupMenu popup = new PopupMenu(this, v);
    popup.setOnMenuItemClickListener(new OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.menu_play:
                    // read the listItemPosition here
                    return true;
                default:
                    return false;
            }
        }
    });
    popup.inflate(R.menu.actions);
    popup.show();
}