【问题标题】:Adding same marker again after remove() - Android在 remove() 之后再次添加相同的标记 - Android
【发布时间】:2019-10-30 07:11:02
【问题描述】:

在我使用 marker.remove() 从 Google 地图中删除标记后,我想再次添加相同的标记。就像,我想隐藏和显示标记。

我不想每次都创建 MarkerOptions。有简单的方法吗?虽然应该有一种直观的方法来做这个简单的事情。

【问题讨论】:

  • 这听起来像是一个概念问题?创建MarkerOptions 很简单,因此要么更新与您的标记相关的DataModel,重用地图标记的实例(不删除标记)
  • @longilong 不!保留 2 个对象是荒谬的,一个用于添加,另一个用于从地图上删除标记。它的答案要么是“没有直接/正确的方法”,要么是“用户 marker.isVisible = true/false”

标签: android google-maps marker


【解决方案1】:

我无法理解您期望得到的结果,但如果您只想重用具有相同值的标记,您可以创建 MarkerOptions 的 var 并将 MarkerOptions 选项存储在其中并重用它。

创建标记变量:

       MarkerOptions markerOptions = new MarkerOptions();

重用它(mMap 是你的 googleMap var):

mMap.addMarker(markerOptions);

【讨论】:

  • 我不喜欢这个解决方案。 cz 为此,我需要维护 2 个列表(或对列表)Marker 和 MarkerOptions。一个用于删除,另一个用于添加标记。这很奇怪。
  • 所以你应该用一些相关的代码重新表述你的问题,并更好地解释你想要的结果。我为您在上面提出的问题提供了一个解决方案:)
  • @M.UsmanKhan U 应该选择包含标记和标记选项而不是列表或对的模型类
【解决方案2】:

有两种可能的方式,两种方式,您只需要保持一个对象对着标记。这两种方法的主要区别在于,如果要使用添加和删除标记,则需要使标记对象可变。

  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:看完你的评论,需要修改第二种方法

根据文档:标签属性可用于存储任何数据,并且它永远不会被地图读取/写入,因此它可用于存储数据模型的 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

【讨论】:

  • 你只考虑标记的“位置”。它可以有自定义图标、文本、视图、标签等。另外,在 remove() 的函数描述中,它说它不保证调用 remove() 后对标记的任何操作。
【解决方案3】:

我找到的答案是:

如果你只想隐藏和显示,使用这个

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多