Android Google Maps V2 でマーカーを長押ししたときにコンテキスト メニューを表示したいのですが、
- マーカーは長いクリック イベントを処理しません。
openContextMenu(View view) メソッドにはビューが必要ですが、何を渡せばよいかわかりません。私はこのようにメソッドを呼び出そうとしました:
openContextMenu(findViewById(R.id.map));
しかし、コンテキスト メニューは開きません。
助けてください:P
Android Google Maps V2 でマーカーを長押ししたときにコンテキスト メニューを表示したいのですが、
openContextMenu(View view) メソッドにはビューが必要ですが、何を渡せばよいかわかりません。私はこのようにメソッドを呼び出そうとしました:
openContextMenu(findViewById(R.id.map));
しかし、コンテキスト メニューは開きません。
助けてください:P
ここでの問題は、3.1.36 の時点で長いクリック リスナーを持つ方法がないことです。
ハックな方法は、OnTouchListener がアタッチされたマップ フラグメントを透過的に表示し、タッチ ダウン イベント時間を保存して false を返すことです。
後でGoogleMap.OnMarkerClickListener.onMarkerClick
電話がかかってきた場合は、これが長いクリックか通常のクリックかを判断できます。
gmaps-api-issuesOnMarkerLongClickListener
で機能リクエストを提出できる適切な方法については、API を使用する必要があります。
これらのいずれかを持っている場合、オプションを含むダイアログを表示するだけで済みますが、CommonsWare が示唆するように、これは最も美しい方法ではありません。アイコンを変更してアクションを表示することでマーカーを選択することをお勧めしますが、それはあなたの選択です。
ロングクリックに関しては、運が悪いと思います。
に関しては、を呼び出す前に をopenContextMenu()
呼び出す必要があります。registerForContextMenu()
View
openContextMenu()
コンテキスト メニューは、コンテキスト アクション バー (別名、アクション モード) を支持して、数年前から流行遅れになっていることに注意してください。
マーカーを追加するときに、いつでもマーカーを何かとして定義することができます。
@Override
public void onMapLongClick(LatLng point) {
map.clear();
myMarker = map.addMarker(new MarkerOptions().position(point));
Log.d("Devon", "Lat: " + point.latitude + " Lng: " + point.longitude);
}
次に onMarkerClick メソッドを呼び出すときに、クリックされたマーカーが定義済みのマーカーと等しい場合は、次のコードを実行します。
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.equals(myMarker)) {
Toast.makeText(this, "Add 'Directions to here' and 'Directions From here' buttons.", Toast.LENGTH_LONG).show();
}
return true;
}