Открытие контекстного меню без регистрации вида - PullRequest
3 голосов
/ 04 августа 2010

Как открыть контекстное меню для вида, не регистрируя его с помощью registerForContextMenu()?

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

Ответы [ 2 ]

1 голос
/ 29 ноября 2013

Мой onTouchEvent имеет следующие строки.Это не красиво, но работает.

private void onLongPressed(View view) {
    registerForContextMenu(view);
    view.getParent().showContextMenuForChild(view);
    unregisterForContextMenu(view);
}

Функция onLongPressed вызывает, если я обнаружил долгое нажатие в моем onTouchListener.

1 голос
/ 04 августа 2010

Я полагаю, что вы можете использовать View.setOnCreateContextMenuListener , чтобы вручную связать свою деятельность в качестве поставщика контекстного меню для представления во время инициализации макета, а затем вызвать View.showContextMenu в представлении как только вы обнаружите долгое нажатие, чтобы вызвать меню. Он должен дозвониться до вашего onCreateContextMenu вызова так же, как если бы вы зарегистрировали его обычным способом.

РЕДАКТИРОВАТЬ: Хорошо, это имеет тот же эффект переопределения слушателя события касания для представления. Учитывая это, единственное решение, которое я могу придумать, - это создать скрытый вид и зарегистрироваться, чтобы он был этим провайдером контекстного меню вида, а затем попросить его показать контекстное меню, как указано выше, когда долго касался реального / видимый вид виден.

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