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);
}
4

2 に答える 2

1

EveryThing には独自の目的と構造があります。ですから、本来の使い方で何かを使う方が常に良いのです。同じことがメニューにも当てはまります。

あなたの場合、コンテキストメニューメカニズムなしで長いクリックイベントの後にすぐにポップアップが必要な場合は、AlertDialogを使用することをお勧めします。

于 2013-04-19T18:15:40.727 に答える