Скажите, пожалуйста, что такое "идентификатор элемента списка", который вы хотите узнать? Я сомневаюсь, что это "идентификатор представления списка". Вероятно, вы имеете в виду "позицию", верно?
Я не знаю, откуда вы вызываете 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;
}
}
Вы также можете сделать это многими другими способами, например создать собственный слушатель OnMenuItemClickListener с переменной listItemPosition в конструкторе и создать собственный интерфейс с помощью 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();
}
person
Maciej Ciemięga
schedule
14.07.2014