У меня странная ошибка в моем приложении.У меня есть RecyclerView, содержащий элементы списка со значком для меню переполнения.См. Ниже. введите описание изображения здесь
Проблема возникает, когда я касаюсь за пределами меню (чтобы отменить его).В следующий раз, когда я выбираю меню, отображается 2 меню.Это продолжается столько раз, сколько я прохожу через движения.Увидеть ниже. введите описание изображения здесь
Я не могу понять, почему это происходит.Вот мой код для отображения меню в элементе списка ViewHolder:
final PopupMenu popupMenu = new PopupMenu(mContext, mOptionsMenu);
mOptionsMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupMenu.inflate(R.menu.menu_edit_delete_dq_competitor);
Menu menu = popupMenu.getMenu();
MenuItem edit = menu.findItem(R.id.edit);
MenuItem delete = menu.findItem(R.id.delete);
MenuItem dq = menu.findItem(R.id.dq);
MenuItem undoDq = menu.findItem(R.id.undo);
// change options if this competitor is DQ
if (competitor.getStatus() == Status.DQ) {
edit.setVisible(false);
delete.setVisible(false);
dq.setVisible(false);
undoDq.setVisible(true);
}
popupMenu.show();
}
});
А вот мой код для выбора пункта меню:
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
FragmentManager manager = getActivity().getSupportFragmentManager();
switch (item.getItemId()) {
case R.id.edit:
// todo finish this
// Intent intent = CompetitorInMatchForm.editIntent(mContext, competitor, true);
// startActivity(intent);
break;
case R.id.delete:
CompetitorStatusInMatchDialog deleteDialog = CompetitorStatusInMatchDialog.newInstance(competitor, "delete", getAdapterPosition());
deleteDialog.setTargetFragment(CompsInMatchFragment.this, REQUEST_ACTION);
deleteDialog.show(manager, DELETE_COMP_FROM_MATCH);
break;
case R.id.dq:
CompetitorStatusInMatchDialog dqDialog = CompetitorStatusInMatchDialog.newInstance(competitor, "dq", getAdapterPosition());
dqDialog.setTargetFragment(CompsInMatchFragment.this, REQUEST_ACTION);
dqDialog.show(manager, DELETE_COMP_FROM_MATCH);
break;
case R.id.undo:
CompetitorStatusInMatchDialog undoDialog = CompetitorStatusInMatchDialog.newInstance(competitor, "undo", getAdapterPosition());
undoDialog.setTargetFragment(CompsInMatchFragment.this, REQUEST_ACTION);
undoDialog.show(manager, DELETE_COMP_FROM_MATCH);
break;
default:
popupMenu.dismiss();
}
return true;
}
});
Любая помощь, определяющая, почемуДиалог накапливает появление меню было бы здорово. Я использовал всплывающие меню раньше без этой проблемы.Я ожидаю, что он отклоняется, когда вы касаетесь за пределами меню.