Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当我点击弹出菜单项时,如何获取列表项id?_Android_Android Layout_Popupmenu - Fatal编程技术网

Android 当我点击弹出菜单项时,如何获取列表项id?

Android 当我点击弹出菜单项时,如何获取列表项id?,android,android-layout,popupmenu,Android,Android Layout,Popupmenu,在我的应用程序中,我在listview中附加了每个项目的弹出菜单。当我们点击弹出菜单图标时,弹出菜单还有两项。我在我的活动中实现了OnMenuItemClickListener来监听弹出菜单项的点击,这很好。但问题是,当我点击任何listview项目的弹出菜单图标时,我如何知道listitem id而不是弹出菜单项id。弹出菜单代码是下: public void showPopup(View v) { PopupMenu popup = new PopupMenu(this, v

在我的应用程序中,我在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;
        }
    }
请告诉我您想知道的listitem id是什么?我怀疑它是listitem视图的id。可能您正在考虑位置,对吗

我不知道你在哪里叫showPopupView v,但你也需要通过那里的职位:

public void showPopup(View v, int listItemPosition) {
    PopupMenu popup = new PopupMenu(this, v);
    popup.setOnMenuItemClickListener(this);
    popup.inflate(R.menu.actions);
    popup.show();
}
您的目标是了解onMenuItemClickMenuItem项目回调中的此位置。 实现这一点的最简单方法是创建变量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侦听器,并使用onMenuItemClickMenuItem项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();
}
请告诉我您想知道的listitem id是什么?我怀疑它是listitem视图的id。可能您正在考虑位置,对吗

我不知道你在哪里叫showPopupView v,但你也需要通过那里的职位:

public void showPopup(View v, int listItemPosition) {
    PopupMenu popup = new PopupMenu(this, v);
    popup.setOnMenuItemClickListener(this);
    popup.inflate(R.menu.actions);
    popup.show();
}
您的目标是了解onMenuItemClickMenuItem项目回调中的此位置。 实现这一点的最简单方法是创建变量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侦听器,并使用onMenuItemClickMenuItem项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();
}


在哪里调用showPopup?@pskink在我的xml文件中,从imageview单击eventOk。。。所以,您的问题并不是如何存储一些值并在onMenuItemClick回调中读取它,而是我从xml创建了onClick attrubile,不知道如何获取父列表项视图的id?弹出菜单与这个问题没有任何关系,对吗?是的,你是对的@MaciejCiemięga首先:你到底为什么需要视图的id?如果你想从列表中播放一些东西,你需要一个位置来从与这个位置相关的列表中获取项目。第二:制作列表时不要使用xml中的onClick事件。。。改为在适配器中设置OnClickListener——在那里,如果您确实需要,您将拥有int位置或列表项视图的id。请更新您的问题,因为它实际上是关于完全不同的事情。您将showPopup称为哪里?@pskink在我的xml文件中从imageview onclick eventOk。。。所以,您的问题并不是如何存储一些值并在onMenuItemClick回调中读取它,而是我从xml创建了onClick attrubile,不知道如何获取父列表项视图的id?弹出菜单与这个问题没有任何关系,对吗?是的,你是对的@MaciejCiemięga首先:你到底为什么需要视图的id?如果你想从列表中播放一些东西,你需要一个位置来从与这个位置相关的列表中获取项目。第二:制作列表时不要使用xml中的onClick事件。。。改为在适配器中设置OnClickListener——在那里,如果您确实需要,您将拥有int位置或列表项视图的id。请更新您的问题,因为它确实是关于完全不同的事情。我的问题是,当我单击弹出菜单图标时,如何获取listItemPosition的值?您正在将listItemPosition传递给showPopup方法,但我没有传递给此方法的值。我需要该值我已更新了答案以存储列表项视图的id而不是位置。我已尝试过对于listview中的每个项目,您的代码但我得到的id值都是-1。是的,请查看我对您的问题的评论。我已将我的评论回滚到显示如何存储列表项目位置的第一个版本。使用弹出菜单即可解决问题。要解决其他问题,请从适配器设置onClick listener,而不是从xml设置onClick,并在此侦听器中调用showPopupView v,final int listItemPosition方法在此处传递位置。我的问题是,当我单击弹出菜单图标时,如何获取listItemPosition的值?您正在将listItemPosition传递给showPopup方法,但我没有传递给此方法的值。我需要该值我已更新答案以存储列表项视图的id而不是位置。我有尝试了你的代码,但我得到的ev的id值是-1
是的,请查看我对您的问题的评论。我已将我的评论回滚到显示如何存储列表项位置的第一个版本。使用弹出菜单即可解决问题。要解决其他问题,请从适配器设置OnClickListener,而不是从xml设置onClick,并在该侦听器中调用showPopupView v,最终的int-listItemPosition方法也在此处传递位置。