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)
请告诉我您想知道的“ 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)