单击弹出菜单项时如何获取列表项 ID?

use*_*455 1 android popupmenu android-layout

在我的应用程序中,我在列表视图中为每个项目附加了弹出菜单。当我们点击弹出菜单图标时,弹出菜单还有两个项目OnMenuItemClickListener。我已经在我的活动中实现了监听弹出菜单项点击,这工作正常。但问题是我如何知道列表项 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Mac*_*ęga 6

请告诉我您想知道的“ listitem id ”是什么?我怀疑它是“列表项视图的 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();
}
Run Code Online (Sandbox Code Playgroud)

您的目标是在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以通过许多其他方式来实现,例如在构造函数中使用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();
}
Run Code Online (Sandbox Code Playgroud)