在 remove() 之后再次添加相同的标记 - Android
Adding same marker again after remove() - Android
在我使用 marker.remove() 从 Google 地图中删除标记后,我想再次添加相同的标记。就像,我想隐藏和显示标记。
我不想每次都创建 MarkerOptions。有简单的方法吗?虽然应该有一种直观的方法来做这个简单的事情。
我不明白你期望得到什么结果,但如果你只想重复使用具有相同值的标记,你可以创建一个 MarkerOptions 的 var 并在其中存储 MarkerOptions 选项并重复使用它。
正在创建标记变量:
MarkerOptions markerOptions = new MarkerOptions();
重新使用它(mMap 是您的 googleMap 变量):
mMap.addMarker(markerOptions);
我找到的答案是:
如果你只想隐藏和显示,使用这个
marker.isVisible = true/false Or marker.setVisibility(true/false) //for java
没有直接的方法再次添加已删除的标记,除非您继续引用 MarkerOptions。您可以像 marker.tag = markerOptions
一样保存它的引用。虽然,在 remove()
的函数描述中说它不保证在调用 remove()
之后对标记进行任何操作。但我认为 TAG 不会去任何地方。
有两种可能的方法,两种方法都只需要针对标记维护一个对象。这两种方法之间的主要区别在于,如果要使用添加和删除标记,则需要使标记对象可变。
使用可见性
marker?.isVisible = true/false
使用添加和删除:
var marker = mMap?.addMarker(MarkerOptions().position(Location))
marker?.remove()
// To add again
marker = mMap?.addMarker(MarkerOptions().position(marker!!.position))
编辑1:看了你的评论,第二种方法需要修改
根据文档:标签 属性 可用于存储任何数据,并且地图永远不会 read/written,因此它可用于存储数据模型的 ID
使用以下数据class
data class MarkerData(val id: String, val title: String, var icon: BitmapDescriptor?, val position: LatLng)
您可以根据需要 add/remove 变量。
将以下函数复制到您的 class
private fun getMarkerOption(model: MarkerData? = null,marker: Marker? = null): Pair<String,MarkerOptions>{
check(!(model == null && marker == null)) { "Both options can't be null" }
var m = model ?: array.first { it.id == marker!!.id }
val markerOptions = MarkerOptions().position(m.position).icon(m.icon).title(m.title)
return Pair(m.id,markerOptions)
}
根据您的要求自定义第三行val markerOptions
请注意,数组是指您将在其中存储标记的所有数据的列表。
使用方法(含型号):
var options = getMarkerOption(array.first())
var marker = mMap?.addMarker(options.second)
marker?.tag = options.first
如何使用(带标记):
options = getMarkerOption(marker = marker)
marker = mMap?.addMarker(options.second)
marker?.tag = options.first
在我使用 marker.remove() 从 Google 地图中删除标记后,我想再次添加相同的标记。就像,我想隐藏和显示标记。
我不想每次都创建 MarkerOptions。有简单的方法吗?虽然应该有一种直观的方法来做这个简单的事情。
我不明白你期望得到什么结果,但如果你只想重复使用具有相同值的标记,你可以创建一个 MarkerOptions 的 var 并在其中存储 MarkerOptions 选项并重复使用它。
正在创建标记变量:
MarkerOptions markerOptions = new MarkerOptions();
重新使用它(mMap 是您的 googleMap 变量):
mMap.addMarker(markerOptions);
我找到的答案是:
如果你只想隐藏和显示,使用这个
marker.isVisible = true/false Or marker.setVisibility(true/false) //for java
没有直接的方法再次添加已删除的标记,除非您继续引用 MarkerOptions。您可以像 marker.tag = markerOptions
一样保存它的引用。虽然,在 remove()
的函数描述中说它不保证在调用 remove()
之后对标记进行任何操作。但我认为 TAG 不会去任何地方。
有两种可能的方法,两种方法都只需要针对标记维护一个对象。这两种方法之间的主要区别在于,如果要使用添加和删除标记,则需要使标记对象可变。
使用可见性
marker?.isVisible = true/false
使用添加和删除:
var marker = mMap?.addMarker(MarkerOptions().position(Location)) marker?.remove() // To add again marker = mMap?.addMarker(MarkerOptions().position(marker!!.position))
编辑1:看了你的评论,第二种方法需要修改
根据文档:标签 属性 可用于存储任何数据,并且地图永远不会 read/written,因此它可用于存储数据模型的 ID
使用以下数据class
data class MarkerData(val id: String, val title: String, var icon: BitmapDescriptor?, val position: LatLng)
您可以根据需要 add/remove 变量。
将以下函数复制到您的 class
private fun getMarkerOption(model: MarkerData? = null,marker: Marker? = null): Pair<String,MarkerOptions>{
check(!(model == null && marker == null)) { "Both options can't be null" }
var m = model ?: array.first { it.id == marker!!.id }
val markerOptions = MarkerOptions().position(m.position).icon(m.icon).title(m.title)
return Pair(m.id,markerOptions)
}
根据您的要求自定义第三行val markerOptions
请注意,数组是指您将在其中存储标记的所有数据的列表。
使用方法(含型号):
var options = getMarkerOption(array.first())
var marker = mMap?.addMarker(options.second)
marker?.tag = options.first
如何使用(带标记):
options = getMarkerOption(marker = marker)
marker = mMap?.addMarker(options.second)
marker?.tag = options.first