基本的に、マーカーをマップに追加すると、新しいマーカーが返され、マーカーIDをマップから取得できます。
Marker m = map.addMarker(new MarkerOptions()
.position(new LatLng(lat,lon)));
String id = m.getId();
多くのマーカーがあり、マーカーを削除したい場合、IDでマーカーを取得する方法はありますか?
問題は、マーカーIDが自動的に生成され、マーカーを個別に追跡するために使用できないことです。これを回避するいくつかの戦略が提案されています。 1つは ハッシュマップを使用してマーカーを追跡する を選択し、特定のマーカーを見つけて削除するために選択したキーを使用することです。別のアイデアは、スニペットなどのマーカーフィールドの1つをオーバーロードして、自分でキーを追加することです。たとえば、(Googleのサンプルコードを使用して)新しいマーカーを作成する場合、独自のキー文字列をスニペットフィールドに入力できます。
mMap.addMarker(new MarkerOptions()
.position(MELBOURNE)
.title("Melbourne")
.snippet(KEY + "Population: 4,137,400"));
後でそのキーを取得することができます
String s = marker.getSnippet()
String key = s.substring(start, end)
次に、条件を使用して、一致する場合は特定のマーカーを削除します。あるアプローチを実行するために必要なことに応じて、別のアプローチよりも簡単で効率的です。
私はこのようにしました:
変数の初期化:
private GoogleMap mMap;
private HashMap<Marker, Integer> mHashMap = new HashMap<Marker, Integer>();
private ArrayList<MyCustomModelClass> myList = new ArrayList<MyCustomModelClass>();
マーカーを追加 on google map using your arraylist:
for (int i = 0; i < myList.size(); i++) {
double latitude = myList.getLatitude();
double longitude = myList.getLongitude();
Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude))).title(myList.getTitle())
.icon(BitmapDescriptorFactory.fromResource(R.drawable.location_icon));
mHashMap.put(marker, i);
}
オンマーカークリックリスナー:
@Override
public boolean onMarkerClick(Marker marker) {
int pos = mHashMap.get(marker);
Log.i("Position of arraylist", pos+"");
}
これがお役に立てば幸いです。
私は知っています、とても遅いです。しかし今は、一意の[〜#〜]タグ[〜#〜]をマーカーに直接追加できます。
Marker marker = mMap.addMarker(markerOptions);
marker.setTag("");
使用する WeakHashMap<Integer,Marker>
この方法では、マーカーへの参照をメモリに保持せず、ガベージコレクションされたマーカーについて心配する必要がないため、マーカーを格納します。
2番目に推奨される方法は、IDとカスタムデータを含むWeakHashMapを作成することです。ドキュメントには、マーカーオブジェクトは変更される可能性があるため、マーカーをキーとして使用しないでください。アクティビティが強制終了されて復元されたが、IDは同じままの場合。マーカーオブジェクトが変更された場合もnullを返すことがあります。
WeakHashMap<Integer,Marker> obj = new WeakHashMap <Integer,Marker>();
今後の視聴者のお役に立てれば幸いです...
これを行う最善の方法は、Map <int, Mark> dictionaryMark;
。
マークを描くたびに辞書にマークを追加するだけです。