Android 当我点击弹出菜单项时,如何获取列表项id?
在我的应用程序中,我在listview中附加了每个项目的弹出菜单。当我们点击弹出菜单图标时,弹出菜单还有两项。我在我的活动中实现了OnMenuItemClickListener来监听弹出菜单项的点击,这很好。但问题是,当我点击任何listview项目的弹出菜单图标时,我如何知道listitem id而不是弹出菜单项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
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方法也在此处传递位置。