在我的应用程序中,我在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;
}
}
答案 0 :(得分:3)
请告诉我你想知道什么是“ listitem id ”?我怀疑它是“ listitem视图的id ”。可能你在考虑“位置”,对吧?
我不知道你从哪里打电话给 showPopup(查看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项目)回调中了解此位置。
实现此目的的最简单方法是创建变量“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项目) ,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();
}