onCreateContextMenu не вызывается - PullRequest
6 голосов
/ 30 января 2012

Похоже, что onCreateContextMenu вообще не вызывается. В моем onCreate для моего ListActivity у меня есть:

list = getListView();
registerForContextMenu(list);

(я знаю, что это избыточно, и я только что передал getListView () с теми же результатами).

Вот мой onCreateOntextMenu;

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    Log.d("LM", "onCreateContextMenu");

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context_landmarks, menu);
}

Журнал никогда не генерируется. У кого-нибудь нет предложений?

Ответы [ 6 ]

8 голосов
/ 30 января 2012

Я думаю, что ListView перехватывает событие и не входит в поведение contextMenu.Это имеет смысл для меня, потому что поведение OnItemLongClickListener перекрывает contextMenu.Если нет, то как он может распознать между contextMenu и OnItemLongClickListener?

1 голос
/ 08 октября 2013

Моя проблема была очень тесно связана с ответом Лулумеи, который указывал мне правильное направление. Я много раз создавал контекстные меню и до сих пор так или иначе не сталкивался с этим.

Я звонил View.setOnClickListener(listener) в Adapter.getView(...), когда должно быть ListView.setOnItemClickListener(listener), чтобы избежать конфликта с контекстным меню.

В целом, я уверен, что OnItemClickListener более оптимизирован, особенно потому, что вместо создания нового экземпляра используется только один экземпляр прослушивателя при каждом создании или повторном использовании представления.

0 голосов
/ 08 января 2014

У меня была эта проблема, и я мог решить ее только путем обеспечения

  1. это потому что соотв. Активность зарегистрировала представления, эта же активность должна затем переопределить onCreateContextMenu (); делать это во фрагменте не получится
  2. поскольку я использовал дополнительный Фрагмент, создающий Адаптер (и регистрирующийся в нем), Фрагмент, а не Активность, должен переопределять onContextItemSelected ().

Я собираюсь отказаться от длинного всплывающего окна в пользу кнопки в стиле Youtube на правом краю карточек, чтобы появилось меню, которое не превращает все остальное в фоновый режим - каков термин для поиска между прочим?

0 голосов
/ 14 сентября 2013

Просто удалите youwidget.setonLongclicklistener и yourwidget.setLongClickable

А затем добавьте registerforContextmenu(yourwidget) в onCreate() затем добавьте код в соответствии с используемым виджетом.

Надеюсь, это будет полезно.

0 голосов
/ 26 июня 2013

Попробуйте найти registerForContextMenu (список); как последний метод для вызова в методе onCreate. Я имею в виду, что этот метод должен вызываться после вызова адаптера списка, а не раньше.

0 голосов
/ 31 марта 2013

Вы должны вызвать registerForContextMenu(View view) метод в onCreate(Bundle savedInstanceState).

...