在remove()之后再次添加相同的标记-Android

时间:2019-06-16 12:01:19

标签: android google-maps marker

在我使用marker.remove()从Google Map中删除一个标记后,我想再次添加相同的标记。我不想每次都创建MarkerOptions。有没有简单的方法?尽管应该有一种直观的方式来完成此简单操作。

3 个答案:

答案 0 :(得分:0)

我不明白您期望得到的结果,但是如果您只想重用具有相同值的标记,则可以创建一个MarkerOptions变量并将其存储在MarkerOptions中,然后重用它。

创建标记var:

       MarkerOptions markerOptions = new MarkerOptions();

重复使用(mMap是您的googleMap变量):

mMap.addMarker(markerOptions);

答案 1 :(得分:0)

我找到的答案是:

如果您只想隐藏和显示,请使用

marker.isVisible = true/false     Or    marker.setVisibility(true/false)  //for java

除非您一直引用MarkerOptions,否则没有直接方法可以再次添加“已删除”标记。您可以将其引用保存为marker.tag = markerOptions。尽管在remove()的函数描述中它说它不保证在调用remove()之后对标记执行任何操作。但是我认为TAG不会去任何地方。

答案 2 :(得分:0)

有两种可能的方式,并且两种方式都只需要针对标记维护一个对象。这两种方法的主要区别在于,如果要使用添加和删除标记,则需要使标记对象可变。

  1. 使用可见性

    marker?.isVisible = true/false

  2. 使用添加和删除

    var marker = mMap?.addMarker(MarkerOptions().position(Location)) marker?.remove() // To add again marker = mMap?.addMarker(MarkerOptions().position(marker!!.position))


编辑1 :阅读您的评论后,需要修改第二种方法

根据docs:标记属性可用于存储任何数据,并且地图永远不会对其进行读写,因此可用于存储数据模型的ID

使用以下数据类

data class MarkerData(val id: String, val title: String, var icon: BitmapDescriptor?, val position: LatLng)

您可以根据需要添加/删除变量。

在您的课堂上复制以下函数

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