Все примеры и вопросы, которые я видел относительно контекстных меню, касались того, где вы регистрируете контекстное меню для кнопки или чего-то подобного. В моем случае у меня есть представление с размером экрана (представление карты 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);
}