Di Google Maps API baru untuk Android, kita dapat menambahkan penanda , tetapi tidak ada cara untuk (dengan mudah) menghapusnya.
Solusi saya adalah menyimpan penanda di peta dan menggambar ulang peta ketika saya ingin menghapus penanda, tetapi itu tidak terlalu efisien.
private final Map<String, MarkerOptions> mMarkers = new ConcurrentHashMap<String, MarkerOptions>();
private void add(String name, LatLng ll) {
final MarkerOptions marker = new MarkerOptions().position(ll).title(name);
mMarkers.put(name, marker);
runOnUiThread(new Runnable() {
@Override
public void run() {
mMap.addMarker(marker);
}
});
}
private void remove(String name) {
mMarkers.remove(name);
runOnUiThread(new Runnable() {
@Override
public void run() {
mMap.clear();
for (MarkerOptions item : mMarkers.values()) {
mMap.addMarker(item);
}
}
});
}
Apakah ada yang punya ide yang lebih baik?
android
google-maps
Jonas
sumber
sumber
Jawaban:
Tanda tangan metode untuk
addMarker
adalah:Jadi, saat Anda menambahkan marker ke a
GoogleMap
dengan menentukan opsi untuk marker tersebut, Anda harus menyimpanMarker
objek yang dikembalikan (bukanMarkerOptions
objek yang Anda gunakan untuk membuatnya). Objek ini memungkinkan Anda untuk mengubah status penanda nanti. Saat Anda selesai dengan penanda, Anda dapat memanggilMarker.remove()
untuk menghapusnya dari peta.Selain itu, jika Anda hanya ingin menyembunyikannya sementara, Anda dapat mengubah visibilitas penanda dengan memanggil
Marker.setVisible(boolean)
.sumber
Tambahkan penanda ke peta seperti ini
Kemudian Anda akan dapat menggunakan metode hapus, itu hanya akan menghapus penanda itu
sumber
untuk menghapus semua coretan dalam penggunaan peta
sumber
jika penanda ada hapus penanda terakhir. jika penanda tidak ada buat penanda saat ini
sumber
Jika Anda menggunakan bahasa Kotlin Anda cukup menambahkan kode ini:
Buat variabel
GoogleMap
danMarker
tipe global .Saya menggunakan penanda variabel agar nilai penanda variabel dapat berubah secara langsung
Dan saya menggunakan fungsi / metode ini untuk menambahkan penanda di peta saya:
Setelah saya membuat fungsi, saya menempatkan kode ini di
onMapReady()
untuk menghapus penanda dan membuat yang baru:Ini bonus jika Anda ingin menampilkan lokasi alamat ketika Anda mengklik penanda tambahkan kode ini untuk menyembunyikan dan menampilkan alamat penanda tetapi Anda memerlukan metode untuk mendapatkan lokasi alamat. Saya mendapat kode dari posting ini: Bagaimana cara mendapatkan alamat lengkap dari lintang dan bujur?
sumber
gunakan kode berikut:
setelah Anda mengklik "penanda" , Anda dapat menghapusnya.
sumber
Hanya CATATAN, sesuatu yang saya buang berjam-jam melacak malam ini ...
Jika Anda memutuskan untuk mempertahankan marker karena suatu alasan, setelah Anda MENGHAPUSnya dari peta ... getTag akan mengembalikan NULL, meskipun nilai get yang tersisa akan dikembalikan dengan nilai yang Anda setel saat marker dibuat .. .
Nilai TAG disetel ke NULL jika Anda pernah menghapus penanda, lalu mencoba mereferensikannya.
Sepertinya bug bagiku ...
sumber
1. Jika Anda ingin menghapus penanda, Anda dapat melakukannya sebagai
marker.remove();
alternatif, Anda juga dapat menyembunyikan penanda daripada menghapusnya sebagaidan membuatnya terlihat nanti kapan pun dibutuhkan.
2. Namun jika Anda ingin menghapus semua penanda dari peta Gunakan
map.clear();
Catatan:
map.clear();
juga akan menghapusPolylines, Circles
dll.3. Jika Anda tidak ingin menghapus,
Polylines, Circles
dll. Daripada menggunakan lingkaran untuk panjang penanda (jika Anda memiliki beberapa penanda) untuk menghapus penanda tersebut. Lihat Contoh di sini ATAU atur terlihat salah Dan jangan gunakanmap.clear();
dalam kasus seperti itu.sumber
Buat variabel global untuk melacak penanda
// Hapus penanda lama
// Tambahkan penanda yang diperbarui dan gerakkan kamera
sumber
Buat array dengan semua penanda di add in map.
Nanti, gunakan:
sumber
Bagi mereka yang mengikuti contoh pada proyek GoogleMaps - MapWithMarker ini, Anda dapat menghapus penanda dengan melakukannya
sumber