onContextItemSelected, кажется, не вызывается - PullRequest
3 голосов
/ 22 декабря 2011

Я создаю очень простое действие на основе списка.Я хочу добавить контекстное меню для каждого элемента в списке, поэтому я назвал registerForContextMenu(mListView).Затем я реализовал методы onCreateContextMenu и onContextItemSelected.

. onCreateContextMenu работает (контекстное меню отображается правильно), но когда я нажимаю на элемент этого меню, ничего не происходит, контекстное меню просто исчезаети метод onContextItemSelected не вызывается (я просто помещаю в него журнал для проверки).

Если это может помочь, обратите внимание, что к ListView также прикреплен onItemClickListener.

Я что-то забыл?

Спасибо!

РЕДАКТИРОВАТЬ: вот код (я спрятал некоторые несущественные вещи)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mListView = new ListView(this);
    mContacts = new Vector<Contact>();
    mAdapter = new ContactAdapter(this, mContacts);
    registerForContextMenu(mListView);
    mListView.setAdapter(mAdapter);
    mListView.setOnItemClickListener(new OnItemClickListener() {
    ... };
}


@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    if (v == mListView) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.list_item_contextmenu, menu);
    }        
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    Log.v("Contacts", "onContextItemSelected called");
    return super.onContextItemSelected(item);  
}

РЕДАКТИРОВАТЬ 2: я добавилonContextMenuClosed() метод, который корректно вызывается при закрытии меню.

Ответы [ 5 ]

15 голосов
/ 05 июля 2012

Я столкнулся с той же проблемой при использовании библиотеки ActionBarSherlock.

Если вы используете эту библиотеку, убедитесь, что вы импортировали правильный MenuItem , равный android.view.MenuItem.

Или просто укажите полный пакет в заголовке метода следующим образом:

public boolean onContextItemSelected(android.view.MenuItem item) {}
0 голосов
/ 16 апреля 2013

Используйте OnMenuItemClickListener это работа.

0 голосов
/ 22 декабря 2011

Снимите этот чек:

if (v == mListView) {
    ...
}

из onCreateContextMenu(..) метод

0 голосов
/ 23 декабря 2011

Я нашел здесь обходной путь: onContextItemSelected никогда не вызывается с использованием диалога с ListView

Однако я все же хотел бы знать, почему он не работает должным образом.1006 * Спасибо всем за потраченное время!

0 голосов
/ 22 декабря 2011

Не видя ваш код, я не могу дать точный ответ, но вы можете попробовать добавить ContextMenuListener вручную

getListView().setOnCreateContextMenuListener(this);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...