[英]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.