繁体   English   中英

当我单击PopUp菜单项时如何获取listitem ID?

[英]How to get listitem id when I click on PopUp menu item?

在我的应用程序中,我在列表视图中的每个项目上都附加了弹出菜单。 当我们单击弹出菜单图标时,弹出菜单还有另外两个项目。我在我的活动中实现了OnMenuItemClickListener ,以侦听弹出菜单项目的点击效果OnMenuItemClickListener ,但是问题是我如何知道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;
        }
    }

请告诉我您想知道的“ listitem id ”是什么? 我怀疑这是“ listitem视图的id ”。 可能您正在考虑“ 职位 ”,对吗?

我不知道您从哪里调用showPopup(View 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 item)回调中的位置。
实现此目的的最简单方法是创建变量“ 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 item,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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM