Как я могу настроить обратный вызов щелчка пункта контекстного меню? - PullRequest
1 голос
/ 05 августа 2011

В моем случае у меня есть ListView, который содержит два вида представлений, папок и изображений.При длительном нажатии на папку появляется ContextMenu с 2 пунктами «Войти в папку» и «Добавить в закладки папку», а когда для изображений отображается ContextMenu с «Вид» и «Удалить».

Как правило, я должен просто переопределить onContextItemSelected в Activity и перечислить все возможные идентификаторы пунктов меню в распределительном шкафу.Но действия с папками и действия с изображениями - это две совершенно разные вещи, верно?Странно ли помещать эти две (или даже больше) вещи в одну функцию?

Интересно, есть ли способ, которым я мог бы установить обработчики обратного вызова для каждого контекстного меню вместо того, чтобы портить onContextItemSelected?Любой совет приветствуется.

Ответы [ 2 ]

3 голосов
/ 07 августа 2011

Я думаю, что использование ContextMenu не является ни гибким, ни удобным решением вообще.

Да, странно обрабатывать 10 или более различных действий одним способом, поэтому, возможно, лучше использовать AlertDialogs вместо ContextMenu. Посмотри на это: http://developer.android.com/guide/topics/ui/dialogs.html#AddingAList

Похоже на контекстное меню, верно? Вы можете отобразить диалог в OnLongClickListener вашего элемента или в AdapterView.OnItemLongClickListener (в случае ListView), и вы можете обрабатывать действия в DialogInterface.OnClickListener.

Также посмотрите на вопрос, который я задал, возможно, он будет вам полезен: Как создать диалог, который выглядит точно так же, как ContextMenu?

0 голосов
/ 05 августа 2011

В вашем onCreateContextMenu() -методе вы можете определить, была ли нажата папка или изображение, проверив переданный View -параметр.

После этого вы можете создать отдельное меню для ваших папок и одно для ваших изображений (отдельный XML-файл для каждого меню) и накачать его.

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

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