2013-04-19 2 views
2

Все примеры и вопросы, которые я видел в контекстных меню, это то, где вы регистрируете контекстное меню на кнопке или что-то подобное. В моем случае у меня есть представление размера экрана (вид карты OSMDroid), в котором реализовано длинное пресное нажатие, которое пройдет в нажатом узле в виде карты. Я хочу, чтобы длинное нажатие открывало контекстное меню, чтобы я мог действовать на этом узле.Открытие контекстного меню при длительном нажатии для просмотра?

Проблема заключается в том, что я регистрирую MapView для контекстного меню, при нажатии на просмотр или на узле в режиме просмотра будет нажата длинная кнопка. например он зарегистрирован для просмотра. (плохо!)

Если я не регистрирую контекстное меню для представления, мое длинное нажатие будет срабатывать только тогда, когда выбран узел. (хорошо!) ОДНАКО Я понятия не имею, как программно отображать или запускать контекстное меню, которое не зарегистрировано первым.

Мне просто нужно отобразить контекстное меню по требованию. У кого-нибудь есть предложения? Благодаря!

@Override 
public void onCreate(final Bundle savedInstanceState) { 
    ... 
    this.mapView = (MapView) findViewById(R.id.mapview); 
    this.registerForContextMenu(this.mapView); // <-- This will register the entire view for a long press context menu 
    ... 
} 
... 

class NodeGestureListener implements OnItemGestureListener<NodeOverlayItem> { 
    @Override 
public boolean onItemLongPress(int index, NodeOverlayItem node) { 
    openContextMenu(mapView); // <-- This won't display anything 
    return false; 
} 
} 
... 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    getMenuInflater().inflate(R.menu.node_menu, menu); 
} 

ответ

1

EveryThing имеет свои собственные цели и структуру. Поэтому всегда лучше использовать что-то, как это предполагается использовать. То же самое происходит с меню.

В вашем случае я думаю, что если вы хотите немедленное всплывающее окно после события с длинным кликом без механизма контекстного меню, лучше используйте AlertDialog.

+0

Я правильно использую контекстное меню. Это мнение, которое я застрял в этом, просто запускает onCreateContextMenu перед длинным приемом для прослушивания. Существующий прослушиватель длинного пресса MapView выполняет свое собственное поведение по умолчанию. Я бы предпочел, чтобы это не было, но я считаю, что было бы проще просто открыть контекстное меню, когда будет нажата длинная кнопка. – garlicman

+0

И AlertDialog не будет достаточно. Для одного я выбираю ContextMenu, поэтому я могу включить несколько вариантов, возможно, динамически. – garlicman

+0

вы можете создать свой собственный диалог с любым дизайном, который вы наблюдаете – stinepike

1

Вы можете зайти в панель действий. Несмотря на то, что он был разработан для версии 3.0, библиотека поддержки заставляет его работать над гораздо более старыми вещами. Кажется, что указывает, что стиль меню , который вы используете, не является предпочтительным, в то время как панель действий - это путь. Бонус: мне гораздо легче справиться, чем старые меню с длинным нажатием.

+0

Я мог бы использовать панель действий. Я как бы ожидал, что меню может передавать больше информации, чем несколько кнопок. Длинные нажатия для узлов на моей карте OSMdroid, поэтому я не уверен, что вы подразумеваете под «старыми долгосрочными меню». – garlicman

Смежные вопросы